﻿using SIIE_ERP.Codigo;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.OleDb;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SIIE_ERP.BaseDatos.Ventas.Transacciones
{
    public class Documento_Ventas
    {
        #region Propiedades

        private string _RFC;
        private string _Usuario;

        #endregion

        #region Constructores

        public Documento_Ventas(string RFC, string Usuario)
        {
            this._RFC = RFC;
            this._Usuario = Usuario;
        }

        #endregion

        #region INSERT

        public Int32 Get_Ultima_Factura()
        {
            string Query = @"SELECT * FROM dbo_Trans_Factura_Cliente_Cab ORDER BY Id_Factura_Cliente DESC";
            return Int32.Parse(SrvDB.ExecuteQuery_Get(Query).Rows[0]["Id_Factura_Cliente"].ToString());
        }

        public Respuesta Insert_Documento(

            Documentos_Id Tipo_Documento,
            EstatusDocs_Id Estatus,
            int Id_Cliente,
            int Id_Moneda,
            int Id_Almacen,
            int Id_Colaborador,
            int Id_Campana,
            int Id_Sucursal,
            int Id_Forma_Pago,
            int Id_Metodo_Pago,
            int Id_Serie,
            DateTime? Fecha_Documento,
            DateTime? Fecha_Vencimiento,
            DateTime? Fecha_Entrega,
            string Descripcion,
            string Referencia,
            string Encabezado,
            string Pie
        )
        {
            try
            {
                string Tabla = "";
                string Id = "";

                string Campo_Serie = "";
                string Campo_IsActive = "";

                if (Tipo_Documento == Documentos_Id.Doc_FacturaCliente)
                {
                    Tabla = "dbo_Trans_Factura_Cliente_Cab";
                    Id = "Id_Factura_Cliente";

                    Campo_Serie = "V_Factura";
                    Campo_IsActive = "IsActive_V_Factura";
                }
                else if (Tipo_Documento == Documentos_Id.Doc_Remision)
                {
                    Tabla = "dbo_Trans_Remision_Cab";
                    Id = "Id_Remision";

                    Campo_Serie = "V_Remision";
                    Campo_IsActive = "IsActive_V_Remision";
                }
                else if (Tipo_Documento == Documentos_Id.Doc_Pedido)
                {
                    Tabla = "dbo_Trans_Pedido_Cab";
                    Id = "Id_Pedido";

                    Campo_Serie = "V_Pedido";
                    Campo_IsActive = "IsActive_V_Pedido";
                }
                else if (Tipo_Documento == Documentos_Id.Doc_CotizacionVenta)
                {
                    Tabla = "dbo_Trans_Cotizacion_Venta_Cab";
                    Id = "Id_Cotizacion_Venta";

                    Campo_Serie = "V_Cotizacion";
                    Campo_IsActive = "IsActive_V_Cotizacion";
                }
                else if (Tipo_Documento == Documentos_Id.Doc_DevolucionCliente)
                {
                    Tabla = "dbo_Trans_Devolucion_Cliente_Cab";
                    Id = "Id_Devolucion_Cliente";

                    Campo_Serie = "V_Devolucion";
                    Campo_IsActive = "IsActive_V_Devolucion";
                }
                else if (Tipo_Documento == Documentos_Id.Doc_NotaCreditoCliente)
                {
                    Tabla = "dbo_Trans_Nota_Credito_Cliente_Cab";
                    Id = "Id_Nota_Credito_Cliente";

                    Campo_Serie = "V_NotaCredito";
                    Campo_IsActive = "IsActive_V_NotaCredito";
                }

                string Query = @"
                INSERT INTO @@Tabla
                    (
                    @@Id_Documento,
                    Secuencia,
                    RFC,
                    Estatus,
                    Id_Cliente,
                    Id_Moneda,                                                                
                    Id_Almacen,
                    Id_Colaborador,
                    Id_Campana,
                    Id_Sucursal,
                    Id_FormaPago,
                    Id_MetodoPago,
                    Id_Serie,
                    Fecha_Documento,
                    Fecha_Vencimiento,
                    Fecha_Entrega,
                    Descripcion,
                    Referencia,
                    Encabezado,
                    Pie,                    
                    Impuesto,
                    Descuento,
                    Partidas,
                    Subtotal,
                    Total,
                    Saldo,
                    Fecha_Alta,
                    Usuario_Alta,
                    Fecha_Mantto,
                    Usuario_Mantto,
                    Is_FE
                    )
                    VALUES
                    (
                    IIF(DCount('*', '@@Tabla') = 0, 1, DMax('@@Id_Documento', '@@Tabla') + 1),
                    DMax('@@Campo_Serie', 'dbo_Cat_Empresa_Serie', ""Id_Serie = @@Id_Serie""),
                    '@@RFC',
                    @Estatus,
                    @Id_Cliente,
                    @Id_Moneda,                                                                
                    @Id_Almacen,
                    @Id_Colaborador,
                    @Id_Campana,
                    @Id_Sucursal,
                    @Id_Forma_Pago,
                    @Id_Metodo_Pago,
                    @Id_Serie,
                    @Fecha_Documento,
                    @Fecha_Vencimiento,
                    @Fecha_Entrega,
                    @Descripcion,
                    @Referencia,
                    @Encabezado,
                    @Pie,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    NOW(),
                    @Usuario_Alta,
                    NOW(),
                    @Usuario_Mantto,
                    0
                    )".Replace("@@RFC", this._RFC)
                      .Replace("@@Tabla", Tabla).
                      Replace("@@Id_Documento", Id).
                      Replace("@@Campo_Serie", Campo_Serie).
                      Replace("@@Id_Serie", Id_Serie.ToString());


                OleDbCommand command = new OleDbCommand(Query);

                command.Parameters.AddWithValue("@Estatus", Estatus.GetHashCode());
                command.Parameters.AddWithValue("@Id_Cliente", Id_Cliente);
                command.Parameters.AddWithValue("@Id_Moneda", Id_Moneda);
                command.Parameters.AddWithValue("@Id_Almacen", Id_Almacen);
                command.Parameters.AddWithValue("@Id_Colaborador", Id_Colaborador);
                command.Parameters.AddWithValue("@Id_Campana", Id_Campana);
                command.Parameters.AddWithValue("@Id_Sucursal", Id_Sucursal);
                command.Parameters.AddWithValue("@Id_Forma_Pago", Id_Forma_Pago);
                command.Parameters.AddWithValue("@Id_Metodo_Pago", Id_Metodo_Pago);
                command.Parameters.AddWithValue("@Id_Serie", Id_Serie);
                command.Parameters.AddWithValue("@Fecha_Documento", Fecha_Documento);
                command.Parameters.AddWithValue("@Fecha_Vencimiento", Fecha_Vencimiento);
                command.Parameters.AddWithValue("@Fecha_Entrega", Fecha_Entrega);
                command.Parameters.AddWithValue("@Descripcion", Descripcion.Replace("'", "''"));
                command.Parameters.AddWithValue("@Referencia", Referencia.Replace("'", "''"));
                command.Parameters.AddWithValue("@Encabezado", Encabezado.Replace("'", "''"));
                command.Parameters.AddWithValue("@Pie", Pie.Replace("'", "''"));
                command.Parameters.AddWithValue("@Usuario_Alta", this._Usuario);
                command.Parameters.AddWithValue("@Usuario_Mantto", this._Usuario);


                if (Id_Cliente == -1)
                    command.Parameters["@Id_Cliente"].Value = DBNull.Value;

                if (Id_Moneda == -1)
                    command.Parameters["@Id_Moneda"].Value = DBNull.Value;

                if (Id_Almacen == -1)
                    command.Parameters["@Id_Almacen"].Value = DBNull.Value;

                if (Id_Colaborador == -1)
                    command.Parameters["@Id_Colaborador"].Value = DBNull.Value;

                if (Id_Campana == -1)
                    command.Parameters["@Id_Campana"].Value = DBNull.Value;

                if (Id_Sucursal == -1)
                    command.Parameters["@Id_Sucursal"].Value = DBNull.Value;

                if (Id_Forma_Pago == -1)
                    command.Parameters["@Id_Forma_Pago"].Value = DBNull.Value;

                if (Id_Metodo_Pago == -1)
                    command.Parameters["@Id_Metodo_Pago"].Value = DBNull.Value;

                if (Id_Serie == -1)
                    command.Parameters["@Id_Serie"].Value = DBNull.Value;

                SrvDB.ExecuteQuery_Insert(command);


                string Query2 = @"

                    UPDATE dbo_Cat_Empresa_Serie
                        SET @@Campo_Serie = DMax('@@Campo_Serie', 'dbo_Cat_Empresa_Serie', ""Id_Serie = @@Id_Serie"") + 1,
                            @@Campo_IsActive = 0
                    WHERE Id_Serie = @@Id_Serie
                ".Replace("@@Id_Serie", Id_Serie.ToString())
                 .Replace("@@Campo_Serie", Campo_Serie)
                 .Replace("@@Campo_IsActive", Campo_IsActive);

                return SrvDB.ExecuteQuery_Update(Query2);
            }
            catch (Exception Ex)
            {
                return new Respuesta(2, Ex.Message);
            }
        }

        public int Conversion(

            int Id_Documento_Origen,
            Documentos_Id Type_Documento_Origen,
            Documentos_Id Type_Documento_Destino
        )
        {

            int Id_Serie_Origen = 0;

            #region Campos de Type_Documento_Origen

            string Tabla_Origen = "";
            string Tabla_Origen_Hijo = "";
            string Id_Origen = "";

            if (Type_Documento_Origen == Documentos_Id.Doc_FacturaCliente)
            {
                Tabla_Origen = "dbo_Trans_Factura_Cliente_Cab";
                Tabla_Origen_Hijo = "dbo_Trans_Factura_Cliente_Linea";
                Id_Origen = "Id_Factura_Cliente";
            }
            else if (Type_Documento_Origen == Documentos_Id.Doc_Remision)
            {
                Tabla_Origen = "dbo_Trans_Remision_Cab";
                Tabla_Origen_Hijo = "dbo_Trans_Remision_Linea";
                Id_Origen = "Id_Remision";
            }
            else if (Type_Documento_Origen == Documentos_Id.Doc_Pedido)
            {
                Tabla_Origen = "dbo_Trans_Pedido_Cab";
                Tabla_Origen_Hijo = "dbo_Trans_Pedido_Linea";
                Id_Origen = "Id_Pedido";
            }
            else if (Type_Documento_Origen == Documentos_Id.Doc_CotizacionVenta)
            {
                Tabla_Origen = "dbo_Trans_Cotizacion_Venta_Cab";
                Tabla_Origen_Hijo = "dbo_Trans_Cotizacion_Venta_Linea";
                Id_Origen = "Id_Cotizacion_Venta";
            }
            else if (Type_Documento_Origen == Documentos_Id.Doc_DevolucionCliente)
            {
                Tabla_Origen = "dbo_Trans_Devolucion_Cliente_Cab";
                Tabla_Origen_Hijo = "dbo_Trans_Devolucion_Cliente_Linea";
                Id_Origen = "Id_Devolucion_Cliente";
            }
            else if (Type_Documento_Origen == Documentos_Id.Doc_NotaCreditoCliente)
            {
                Tabla_Origen = "dbo_Trans_Nota_Credito_Cliente_Cab";
                Tabla_Origen_Hijo = "dbo_Trans_Nota_Credito_Cliente_Linea";
                Id_Origen = "Id_Nota_Credito_Cliente";
            }
            #endregion

            #region Campos de Type_Documento_Destino

            string Tabla_Destino = "";
            string Tabla_Destino_Hijo = "";
            string Id_Destino = "";

            string Campo_Serie_Destino = "";
            string Campo_IsActive_Destino = "";

            if (Type_Documento_Destino == Documentos_Id.Doc_FacturaCliente)
            {
                Tabla_Destino = "dbo_Trans_Factura_Cliente_Cab";
                Tabla_Destino_Hijo = "dbo_Trans_Factura_Cliente_Linea";
                Id_Destino = "Id_Factura_Cliente";

                Campo_Serie_Destino = "V_Factura";
                Campo_IsActive_Destino = "IsActive_V_Factura";
            }
            else if (Type_Documento_Destino == Documentos_Id.Doc_Remision)
            {
                Tabla_Destino = "dbo_Trans_Remision_Cab";
                Tabla_Destino_Hijo = "dbo_Trans_Remision_Linea";
                Id_Destino = "Id_Remision";

                Campo_Serie_Destino = "V_Remision";
                Campo_IsActive_Destino = "IsActive_V_Remision";
            }
            else if (Type_Documento_Destino == Documentos_Id.Doc_Pedido)
            {
                Tabla_Destino = "dbo_Trans_Pedido_Cab";
                Tabla_Destino_Hijo = "dbo_Trans_Pedido_Linea";
                Id_Destino = "Id_Pedido";

                Campo_Serie_Destino = "V_Pedido";
                Campo_IsActive_Destino = "IsActive_V_Pedido";
            }
            else if (Type_Documento_Destino == Documentos_Id.Doc_CotizacionVenta)
            {
                Tabla_Destino = "dbo_Trans_Cotizacion_Venta_Cab";
                Tabla_Destino_Hijo = "dbo_Trans_Cotizacion_Venta_Linea";
                Id_Destino = "Id_Cotizacion_Venta";

                Campo_Serie_Destino = "V_Cotizacion";
                Campo_IsActive_Destino = "IsActive_V_Cotizacion";
            }
            else if (Type_Documento_Destino == Documentos_Id.Doc_DevolucionCliente)
            {
                Tabla_Destino = "dbo_Trans_Devolucion_Cliente_Cab";
                Tabla_Destino_Hijo = "dbo_Trans_Devolucion_Cliente_Linea";
                Id_Destino = "Id_Devolucion_Cliente";

                Campo_Serie_Destino = "V_Devolucion";
                Campo_IsActive_Destino = "IsActive_V_Devolucion";
            }
            else if (Type_Documento_Destino == Documentos_Id.Doc_NotaCreditoCliente)
            {
                Tabla_Destino = "dbo_Trans_Nota_Credito_Cliente_Cab";
                Tabla_Destino_Hijo = "dbo_Trans_Nota_Credito_Cliente_Linea";
                Id_Destino = "Id_Nota_Credito_Cliente";

                Campo_Serie_Destino = "V_NotaCredito";
                Campo_IsActive_Destino = "IsActive_V_NotaCredito";
            }
            #endregion

            string Query_Serie = @"

                SELECT * FROM dbo_Cat_Empresa_Serie WHERE Id_Serie = DMax('Id_Serie', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen"")
            ".Replace("@@Tabla_Origen", Tabla_Origen).
              Replace("@@Id_Documento_Origen", Id_Origen).
              Replace("@@Id_Origen", Id_Documento_Origen.ToString());

            DataTable dt_serie = SrvDB.ExecuteQuery_Get(Query_Serie);

            Id_Serie_Origen = Int32.Parse(dt_serie.Rows[0]["Id_Serie"].ToString());

            string Query = @"
                INSERT INTO @@Tabla_Destino
                    (
                    @@Id_Documento_Destino,
                    Secuencia,
                    RFC,
                    Estatus,
                    Id_Cliente,
                    Fecha_Documento,
                    Fecha_Vencimiento,
                    Fecha_Entrega,
                    Pedido_Cliente,
                    Id_Almacen,
                    Id_Colaborador,
                    Id_Moneda,
                    Descripcion,
                    Referencia,
                    Encabezado,
                    Pie,
                    Partidas,
                    Subtotal,
                    Descuento,
                    Impuesto,
                    Total,
                    Saldo,
                    De_Remision,
                    NumCtaBancaria,
                    Id_Sucursal,
                    Id_FormaPago,
                    Id_MetodoPago,
                    Id_Serie,
                    Id_Campana,                    
                    Fecha_Alta,
                    Usuario_Alta,
                    Fecha_Mantto,
                    Usuario_Mantto,
                    Is_FE
                    )
                    VALUES
                    (
                    IIF(DCount('*', '@@Tabla_Destino') = 0, 1, DMax('@@Id_Documento_Destino', '@@Tabla_Destino') + 1),
                    DMax('@@Campo_Serie_Destino', 'dbo_Cat_Empresa_Serie', ""Id_Serie = @@Id_Serie""),
                    DMax('RFC', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),                    
                    @@Estatus,
                    DFirst('Id_Cliente', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Fecha_Documento', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Fecha_Vencimiento', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Fecha_Entrega', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Pedido_Cliente', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Id_Almacen', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Id_Colaborador', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Id_Moneda', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Descripcion', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Referencia', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Encabezado', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Pie', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Partidas', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Subtotal', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Descuento', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Impuesto', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Total', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Saldo', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('De_Remision', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('NumCtaBancaria', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Id_Sucursal', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Id_FormaPago', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Id_MetodoPago', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Id_Serie', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Id_Campana', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),                    
                    DFirst('Fecha_Alta', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Usuario_Alta', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Fecha_Mantto', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Usuario_Mantto', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    0

                )".Replace("@@Tabla_Origen", Tabla_Origen).
                   Replace("@@Tabla_Destino", Tabla_Destino).
                   Replace("@@Id_Origen", Id_Documento_Origen.ToString()).
                   Replace("@@Id_Documento_Destino", Id_Destino).
                   Replace("@@Id_Documento_Origen", Id_Origen).
                   Replace("@@Campo_Serie_Destino", Campo_Serie_Destino).
                   Replace("@@Id_Serie", Id_Serie_Origen.ToString()).
                   Replace("@@Estatus", EstatusDocs_Id.Estatus_Doc_Cargado.GetHashCode().ToString());

            Respuesta q1 = SrvDB.ExecuteQuery_Insert(new OleDbCommand(Query));

            int Res_Q4 = 0;
            string Query4 = @" SELECT IIF(DCount('*', '@@Tabla_Destino') = 0, 1, DMax('@@Id_Documento_Destino', '@@Tabla_Destino'))"
                .Replace("@@Tabla_Destino", Tabla_Destino)
                .Replace("@@Id_Documento_Destino", Id_Destino);

            Res_Q4 = Int32.Parse(SrvDB.ExecuteQuery_Get(Query4).Rows[0][0].ToString());

            string Query_Lineas_Original = @"

                SELECT * FROM @@Tabla_Origen_Hijo WHERE Id_Padre = @@Id_Origen;
            ".Replace("@@Tabla_Origen_Hijo", Tabla_Origen_Hijo)
             .Replace("@@Id_Origen", Id_Documento_Origen.ToString());

            DataTable dt_Lineas_Original = SrvDB.ExecuteQuery_Get(Query_Lineas_Original);

            for (int i = 0; i < dt_Lineas_Original.Rows.Count; i++)
            {
                string Query_Lineas = @"

                INSERT INTO @@Tabla_Destino_Hijo
                    (
                        Id_Linea,
                        RFC,
                        Id_Padre,
                        Secuencia,
                        Id_Articulo,
                        Cantidad,
                        Precio_Unitario,
                        Porc_Descuento,
                        Descuento,
                        Precio_SubTotal,
                        Porc_Impuesto,
                        Impuesto,
                        Precio_Total,
                        Cantidad_Pendiente,
                        Comentarios,
                        Fecha_Alta,
                        Usuario_Alta,
                        Fecha_Mantto,
                        Usuario_Mantto
                    )

                    VALUES 
                    (
                        IIF(DCount('*', '@@Tabla_Destino_Hijo') = 0, 1, DMax('Id_Linea', '@@Tabla_Destino_Hijo') + 1),
                        '@@RFC',
                        @@Id_Padre,
                        @@Secuencia,
                        @@Id_Articulo,
                        @@Cantidad,
                        @@Precio_Unitario,
                        @@Porc_Descuento,
                        @@Descuento,
                        @@Precio_SubTotal,
                        @@Porc_Impuesto,
                        @@Impuesto,
                        @@Precio_Total,
                        @@Cantidad_Pendiente,
                        '@@Comentarios',
                        '@@Fecha_Alta',
                        '@@Usuario_Alta',
                        '@@Fecha_Mantto',
                        '@@Usuario_Mantto'
                    )
                ".Replace("@@Tabla_Destino_Hijo", Tabla_Destino_Hijo)
                 .Replace("@@Id_Padre", Res_Q4.ToString())
                 .Replace("@@RFC", dt_Lineas_Original.Rows[i]["RFC"].ToString())
                 .Replace("@@Cantidad_Pendiente", dt_Lineas_Original.Rows[i]["Cantidad_Pendiente"].ToString())
                 .Replace("@@Secuencia", dt_Lineas_Original.Rows[i]["Secuencia"].ToString())
                 .Replace("@@Id_Articulo", dt_Lineas_Original.Rows[i]["Id_Articulo"].ToString())
                 .Replace("@@Cantidad", dt_Lineas_Original.Rows[i]["Cantidad"].ToString())
                 .Replace("@@Precio_Unitario", dt_Lineas_Original.Rows[i]["Precio_Unitario"].ToString())
                 .Replace("@@Porc_Descuento", dt_Lineas_Original.Rows[i]["Porc_Descuento"].ToString())
                 .Replace("@@Descuento", dt_Lineas_Original.Rows[i]["Descuento"].ToString())
                 .Replace("@@Precio_SubTotal", dt_Lineas_Original.Rows[i]["Precio_SubTotal"].ToString())
                 .Replace("@@Porc_Impuesto", dt_Lineas_Original.Rows[i]["Porc_Impuesto"].ToString())
                 .Replace("@@Impuesto", dt_Lineas_Original.Rows[i]["Impuesto"].ToString())
                 .Replace("@@Precio_Total", dt_Lineas_Original.Rows[i]["Precio_Total"].ToString())
                 .Replace("@@Comentarios", dt_Lineas_Original.Rows[i]["Comentarios"].ToString())
                 .Replace("@@Fecha_Alta", dt_Lineas_Original.Rows[i]["Fecha_Alta"].ToString())
                 .Replace("@@Usuario_Alta", dt_Lineas_Original.Rows[i]["Usuario_Alta"].ToString())
                 .Replace("@@Fecha_Mantto", dt_Lineas_Original.Rows[i]["Fecha_Mantto"].ToString())
                 .Replace("@@Usuario_Mantto", dt_Lineas_Original.Rows[i]["Usuario_Mantto"].ToString());

                Respuesta q2 = SrvDB.ExecuteQuery_Insert(Query_Lineas);
            }

            string Query3 = @"

                    UPDATE dbo_Cat_Empresa_Serie
                        SET @@Campo_Serie = DMax('@@Campo_Serie', 'dbo_Cat_Empresa_Serie', ""Id_Serie = @@Id_Serie"") + 1,
                            @@Campo_IsActive = 0
                    WHERE Id_Serie = @@Id_Serie
                ".Replace("@@Id_Serie", Id_Serie_Origen.ToString())
                 .Replace("@@Campo_Serie", Campo_Serie_Destino)
                 .Replace("@@Campo_IsActive", Campo_IsActive_Destino);

            Respuesta q3 = SrvDB.ExecuteQuery_Update(Query3);

            string Query5 = @"
                
                INSERT INTO dbo_Trans_Relacion_Documentos
                (
                    Id_Relacion,
                    Tipo_Doc_Origen,
                    Id_Doc_Origen,
                    Tipo_Doc_Destino,
                    Id_Doc_Destino,
                    Fecha_Alta,
                    Usuario_Alta
                )
                VALUES
                (
                    IIF(DCount('*', 'dbo_Trans_Relacion_Documentos') = 0, 1, DMax('Id_Relacion', 'dbo_Trans_Relacion_Documentos') + 1),
                    @@Tipo_Doc_Origen,
                    @@Id_Doc_Origen,
                    @@Tipo_Doc_Destino,
                    @@Id_Doc_Destino,
                    NOW(),
                    '@@Usuario'
                )

            ".Replace("@@Tipo_Doc_Origen", Type_Documento_Origen.GetHashCode().ToString())
             .Replace("@@Id_Doc_Origen", Id_Documento_Origen.ToString())
             .Replace("@@Tipo_Doc_Destino", Type_Documento_Destino.GetHashCode().ToString())
             .Replace("@@Id_Doc_Destino", Res_Q4.ToString())
             .Replace("@@Usuario", this._Usuario);

            Respuesta q5 = SrvDB.ExecuteQuery_Insert(Query5);

            if (Type_Documento_Origen == Documentos_Id.Doc_Remision && Type_Documento_Destino == Documentos_Id.Doc_FacturaCliente)
            {
                double Saldo_Aux = Double.Parse(SrvDB.ExecuteQuery_Get(
                    @"SELECT Saldo FROM @@Tabla_Origen WHERE @@Id_Origen = @@Id"
                    .Replace("@@Tabla_Origen", Tabla_Origen)
                    .Replace("@@Id_Origen", Id_Origen)
                    .Replace("@@Id", Id_Documento_Origen.ToString())
                    ).Rows[0][0].ToString());

                string QueryUpdateSaldo2 = "UPDATE @@Tabla_Destino SET Saldo = @@Saldo WHERE @@Id_Destino = @@Id"
                    .Replace("@@Tabla_Destino", Tabla_Destino)
                    .Replace("@@Id_Destino", Id_Destino)
                    .Replace("@@Id", Res_Q4.ToString())
                    .Replace("@@Saldo", Saldo_Aux.ToString());

                Respuesta Aux_1 = SrvDB.ExecuteQuery_Update(QueryUpdateSaldo2);

                string QueryIs = @"

                    UPDATE dbo_Trans_Factura_Cliente_Cab SET De_Remision = 1 WHERE Id_Factura_Cliente = @@Id
                ".Replace("@@Id", Res_Q4.ToString());

                Respuesta qIs = SrvDB.ExecuteQuery_Insert(QueryIs);

                string QueryIs2 = @"

                    UPDATE dbo_Trans_Remision_Cab SET Saldo = 0 WHERE Id_Remision = @@Id
                ".Replace("@@Id", Id_Documento_Origen.ToString());

                Respuesta qIs2 = SrvDB.ExecuteQuery_Insert(QueryIs2);
            }

            if ((Type_Documento_Origen == Documentos_Id.Doc_FacturaCliente || Type_Documento_Origen == Documentos_Id.Doc_Remision) && Type_Documento_Destino == Documentos_Id.Doc_DevolucionCliente)
            {
                double Saldo_Aux = Double.Parse(SrvDB.ExecuteQuery_Get(
                    @"SELECT Saldo FROM @@Tabla_Origen WHERE @@Id_Origen = @@Id"
                    .Replace("@@Tabla_Origen", Tabla_Origen)
                    .Replace("@@Id_Origen", Id_Origen)
                    .Replace("@@Id", Id_Documento_Origen.ToString())
                    ).Rows[0][0].ToString());

                double Total_Aux = Double.Parse(SrvDB.ExecuteQuery_Get(
                    @"SELECT Total FROM @@Tabla_Origen WHERE @@Id_Origen = @@Id"
                    .Replace("@@Tabla_Origen", Tabla_Origen)
                    .Replace("@@Id_Origen", Id_Origen)
                    .Replace("@@Id", Id_Documento_Origen.ToString())
                    ).Rows[0][0].ToString());

                string QueryUpdateSaldo = "UPDATE @@Tabla_Origen SET Saldo = 0 WHERE @@Id_Origen = @@Id"
                    .Replace("@@Tabla_Origen", Tabla_Origen)
                    .Replace("@@Id_Origen", Id_Origen)
                    .Replace("@@Id", Id_Documento_Origen.ToString());

                Respuesta Aux_1 = SrvDB.ExecuteQuery_Update(QueryUpdateSaldo);

                string QueryUpdateSaldo2 = "UPDATE @@Tabla_Destino SET Saldo = @@Saldo WHERE @@Id_Destino = @@Id"
                    .Replace("@@Tabla_Destino", Tabla_Destino)
                    .Replace("@@Id_Destino", Id_Destino)
                    .Replace("@@Id", Res_Q4.ToString())
                    .Replace("@@Saldo", (Total_Aux - Saldo_Aux).ToString());

                Respuesta Aux_2 = SrvDB.ExecuteQuery_Update(QueryUpdateSaldo2);
            }

            //Establecemos si viene de una remisión o no
            if (Type_Documento_Origen == Documentos_Id.Doc_Remision)
            {
                string QueryUpdateSaldo3 = "UPDATE @@Tabla_Destino SET De_Remision = -1 WHERE @@Id_Destino = @@Id"
                    .Replace("@@Tabla_Destino", Tabla_Destino)
                    .Replace("@@Id_Destino", Id_Destino)
                    .Replace("@@Id", Res_Q4.ToString());

                Respuesta Aux_3 = SrvDB.ExecuteQuery_Update(QueryUpdateSaldo3);
            }
            else
            {
                string QueryUpdateSaldo3 = "UPDATE @@Tabla_Destino SET De_Remision = 0 WHERE @@Id_Destino = @@Id"
                    .Replace("@@Tabla_Destino", Tabla_Destino)
                    .Replace("@@Id_Destino", Id_Destino)
                    .Replace("@@Id", Res_Q4.ToString());

                Respuesta Aux_3 = SrvDB.ExecuteQuery_Update(QueryUpdateSaldo3);
            }

            if (q1.Id == 1 && q3.Id == 1 && q5.Id == 1)
            {
                return Res_Q4;
            }

            return -1;
        }

        public Respuesta AnexarRemisionAFactura(

            int Id_Remision_Origen,
            int Id_Factura_Destino
        )
        {
            //Actualiza encabezado de la Factura y le suma las cantidades de la Remisión
            string Query = @"
                UPDATE dbo_Trans_Factura_Cliente_Cab
                    
                    SET 
                    
                        Partidas = Partidas + DFirst('Partidas', 'dbo_Trans_Remision_Cab', ""Id_Remision = @@Id_Origen""),
                        Subtotal = Subtotal + DFirst('Subtotal', 'dbo_Trans_Remision_Cab', ""Id_Remision = @@Id_Origen""),
                        Descuento = Descuento + DFirst('Descuento', 'dbo_Trans_Remision_Cab', ""Id_Remision = @@Id_Origen""),
                        Impuesto = Impuesto + DFirst('Impuesto', 'dbo_Trans_Remision_Cab', ""Id_Remision = @@Id_Origen""),
                        Total = Total + DFirst('Total', 'dbo_Trans_Remision_Cab', ""Id_Remision = @@Id_Origen""),
                        Saldo = Saldo + DFirst('Saldo', 'dbo_Trans_Remision_Cab', ""Id_Remision = @@Id_Origen"")

                   WHERE Id_Factura_Cliente = @@Id_Destino 

                 ".Replace("@@Id_Origen", Id_Remision_Origen.ToString())
                  .Replace("@@Id_Destino", Id_Factura_Destino.ToString());

            Respuesta q1 = SrvDB.ExecuteQuery_Update(new OleDbCommand(Query));

            //Añade las lineas a la Factura a partir de la Remisión            
            string Query_Lineas_Original = @"
                SELECT * FROM dbo_Trans_Remision_Linea WHERE Id_Padre = @@Id_Origen;
            ".Replace("@@Id_Origen", Id_Remision_Origen.ToString());

            DataTable dt_Lineas_Original = SrvDB.ExecuteQuery_Get(Query_Lineas_Original);

            for (int i = 0; i < dt_Lineas_Original.Rows.Count; i++)
            {
                string Query_Lineas = @"

                INSERT INTO dbo_Trans_Factura_Cliente_Linea
                    (
                        Id_Linea,
                        RFC,
                        Id_Padre,
                        Secuencia,
                        Id_Articulo,
                        Cantidad,
                        Precio_Unitario,
                        Porc_Descuento,
                        Descuento,
                        Precio_SubTotal,
                        Porc_Impuesto,
                        Impuesto,
                        Precio_Total,
                        Cantidad_Pendiente,
                        Comentarios,
                        Fecha_Alta,
                        Usuario_Alta,
                        Fecha_Mantto,
                        Usuario_Mantto
                    )

                    VALUES 
                    (
                        IIF(DCount('*', 'dbo_Trans_Factura_Cliente_Linea') = 0, 1, DMax('Id_Linea', 'dbo_Trans_Factura_Cliente_Linea') + 1),
                        '@@RFC',
                        @@Id_Padre,
                        @@Secuencia,
                        @@Id_Articulo,
                        @@Cantidad,
                        @@Precio_Unitario,
                        @@Porc_Descuento,
                        @@Descuento,
                        @@Precio_SubTotal,
                        @@Porc_Impuesto,
                        @@Impuesto,
                        @@Precio_Total,
                        @@Cantidad_Pendiente,
                        '@@Comentarios',
                        '@@Fecha_Alta',
                        '@@Usuario_Alta',
                        '@@Fecha_Mantto',
                        '@@Usuario_Mantto'
                    )
                ".Replace("@@Id_Padre", Id_Factura_Destino.ToString())
                 .Replace("@@RFC", dt_Lineas_Original.Rows[i]["RFC"].ToString())
                 .Replace("@@Cantidad_Pendiente", dt_Lineas_Original.Rows[i]["Cantidad_Pendiente"].ToString())
                 .Replace("@@Secuencia", dt_Lineas_Original.Rows[i]["Secuencia"].ToString())
                 .Replace("@@Id_Articulo", dt_Lineas_Original.Rows[i]["Id_Articulo"].ToString())
                 .Replace("@@Cantidad", dt_Lineas_Original.Rows[i]["Cantidad"].ToString())
                 .Replace("@@Precio_Unitario", dt_Lineas_Original.Rows[i]["Precio_Unitario"].ToString())
                 .Replace("@@Porc_Descuento", dt_Lineas_Original.Rows[i]["Porc_Descuento"].ToString())
                 .Replace("@@Descuento", dt_Lineas_Original.Rows[i]["Descuento"].ToString())
                 .Replace("@@Precio_SubTotal", dt_Lineas_Original.Rows[i]["Precio_SubTotal"].ToString())
                 .Replace("@@Porc_Impuesto", dt_Lineas_Original.Rows[i]["Porc_Impuesto"].ToString())
                 .Replace("@@Impuesto", dt_Lineas_Original.Rows[i]["Impuesto"].ToString())
                 .Replace("@@Precio_Total", dt_Lineas_Original.Rows[i]["Precio_Total"].ToString())
                 .Replace("@@Comentarios", dt_Lineas_Original.Rows[i]["Comentarios"].ToString())
                 .Replace("@@Fecha_Alta", dt_Lineas_Original.Rows[i]["Fecha_Alta"].ToString())
                 .Replace("@@Usuario_Alta", dt_Lineas_Original.Rows[i]["Usuario_Alta"].ToString())
                 .Replace("@@Fecha_Mantto", dt_Lineas_Original.Rows[i]["Fecha_Mantto"].ToString())
                 .Replace("@@Usuario_Mantto", dt_Lineas_Original.Rows[i]["Usuario_Mantto"].ToString());

                Respuesta q2 = SrvDB.ExecuteQuery_Insert(Query_Lineas);
            }

            string QueryUpdateSaldo2 = @"UPDATE dbo_Trans_Remision_Cab SET Saldo = 0 WHERE Id_Remision = @@Id"
                    .Replace("@@Id", Id_Remision_Origen.ToString());


            Respuesta Aux_1 = SrvDB.ExecuteQuery_Update(QueryUpdateSaldo2);


            //Inserta la relación de Documentos
            string Query5 = @"
                
                INSERT INTO dbo_Trans_Relacion_Documentos
                (
                    Id_Relacion,
                    Tipo_Doc_Origen,
                    Id_Doc_Origen,
                    Tipo_Doc_Destino,
                    Id_Doc_Destino,
                    Fecha_Alta,
                    Usuario_Alta
                )
                VALUES
                (
                    IIF(DCount('*', 'dbo_Trans_Relacion_Documentos') = 0, 1, DMax('Id_Relacion', 'dbo_Trans_Relacion_Documentos') + 1),
                    @@Tipo_Doc_Origen,
                    @@Id_Doc_Origen,
                    @@Tipo_Doc_Destino,
                    @@Id_Doc_Destino,
                    NOW(),
                    '@@Usuario'
                )

            ".Replace("@@Tipo_Doc_Origen", Documentos_Id.Doc_Remision.GetHashCode().ToString())
             .Replace("@@Id_Doc_Origen", Id_Remision_Origen.ToString())
             .Replace("@@Tipo_Doc_Destino", Documentos_Id.Doc_FacturaCliente.GetHashCode().ToString())
             .Replace("@@Id_Doc_Destino", Id_Factura_Destino.ToString())
             .Replace("@@Usuario", this._Usuario);

            Respuesta q5 = SrvDB.ExecuteQuery_Insert(Query5);

            if (q5.Id == 1 && q1.Id == 1 && Aux_1.Id == 1)
            {
                return new Respuesta(1, "Éxito!");
            }
            else
            {
                return new Respuesta(1, "ERROR!");
            }
        }


        public Respuesta Insertar_Nota_Credito_Clientes(

            int Id_Nota_Credito,
            int Id_Documento,
            int Tipo_Documento,
            double Importe,
            int Id_Moneda
          )
        {
            try
            {

                string Query = @"                
                INSERT INTO  dbo_Trans_Aplicacion_Nota_Credito_Clientes
                (
                    Id_Aplicacion,
                    Id_Nota_Credito,
                    Id_Documento,
                    Tipo_Documento,
                    Importe,
                    Id_Moneda,
                    Fecha_Alta,
                    Usuario_Alta,
                    Fecha_Mantto,
                    Usuario_Mantto
                )
                VALUES
                (
                    IIF(DCount('*', 'dbo_Trans_Aplicacion_Nota_Credito_Clientes') = 0, 1, DMax('Id_Aplicacion', 'dbo_Trans_Aplicacion_Nota_Credito_Clientes') + 1),
                    @@Id_Nota_Credito,
                    @@Id_Documento,
                    @@Tipo_Documento,
                    @@Importe,
                    @@Id_Moneda,
                    NOW(),
                    '@@Usuario_Alta',
                    NOW(),
                    '@@Usuario_Mantto'
                )";
                Query = Query.Replace("@@Id_Nota_Credito", Id_Nota_Credito.ToString());
                Query = Query.Replace("@@Id_Documento", Id_Documento.ToString());
                Query = Query.Replace("@@Tipo_Documento", Tipo_Documento.ToString());
                Query = Query.Replace("@@Importe", Importe.ToString());
                Query = Query.Replace("@@Id_Moneda", Id_Moneda.ToString());
                Query = Query.Replace("@@Usuario_Alta", this._Usuario);
                Query = Query.Replace("@@Usuario_Mantto", this._Usuario);

                return SrvDB.ExecuteQuery_Insert(Query);
            }
            catch (Exception Ex)
            {
                return new Respuesta(2, Ex.Message);
            }

        }

        #endregion

        #region UPDATE

        public static Respuesta Update_Addenda
        (
            int Id_Documento,
            Documentos_Id Tipo_Documento,
            string Addenda
        )
        {
            string Tabla = "";
            string Id = "";

            if (Tipo_Documento == Documentos_Id.Doc_FacturaCliente)
            {
                Tabla = "dbo_Trans_Factura_Cliente_Cab";
                Id = "Id_Factura_Cliente";
            }
            else if (Tipo_Documento == Documentos_Id.Doc_DevolucionCliente)
            {
                Tabla = "dbo_Trans_Devolucion_Cliente_Cab";
                Id = "Id_Devolucion_Cliente";
            }
            else if (Tipo_Documento == Documentos_Id.Doc_NotaCreditoCliente)
            {
                Tabla = "dbo_Trans_Nota_Credito_Cliente_Cab";
                Id = "Id_Nota_Credito_Cliente";
            }
            else if (Tipo_Documento == Documentos_Id.Doc_ReciboArrendamientoVentas)
            {
                Tabla = "dbo_Trans_ReciboArrendamiento_Cliente_Cab";
                Id = "Id_ReciboArrendamiento_Cliente";
            }
            else if (Tipo_Documento == Documentos_Id.Doc_ReciboHonorariosVentas)
            {
                Tabla = "dbo_Trans_ReciboHonorarios_Cliente_Cab";
                Id = "Id_ReciboHonorarios_Cliente";
            }

            string Query = @"UPDATE @@Tabla
                             
                                SET                                 
                                
                                [XML_Addenda] = @XML_File                             
                                
                                WHERE @@Id_Desc = @@Id
                             ";

            Query = Query.Replace("@@Tabla", Tabla);
            Query = Query.Replace("@@Id_Desc", Id);
            Query = Query.Replace("@@Id", Id_Documento.ToString());

            OleDbCommand command = new OleDbCommand(Query);
            command.Parameters.AddWithValue("@XML_File", Addenda);

            return SrvDB.ExecuteQuery_Update(command);
        }

        public Respuesta Update_Documento_Cabecera(

            int Id_Documento,
            Documentos_Id Tipo_Documento,
            int Id_Almacen,
            int Id_Colaborador,
            int Id_Sucursal,
            int Id_Forma_Pago,
            int Id_Metodo_Pago,
            DateTime? Fecha_Documento,
            DateTime? Fecha_Vencimiento,
            DateTime? Fecha_Entrega,
            string Descripcion,
            string Referencia,
            string Encabezado,
            string Pie
        )
        {
            try
            {
                string Tabla = "";
                string Id = "";

                if (Tipo_Documento == Documentos_Id.Doc_FacturaCliente)
                {
                    Tabla = "dbo_Trans_Factura_Cliente_Cab";
                    Id = "Id_Factura_Cliente";
                }
                else if (Tipo_Documento == Documentos_Id.Doc_Remision)
                {
                    Tabla = "dbo_Trans_Remision_Cab";
                    Id = "Id_Remision";
                }
                else if (Tipo_Documento == Documentos_Id.Doc_Pedido)
                {
                    Tabla = "dbo_Trans_Pedido_Cab";
                    Id = "Id_Pedido";
                }
                else if (Tipo_Documento == Documentos_Id.Doc_CotizacionVenta)
                {
                    Tabla = "dbo_Trans_Cotizacion_Venta_Cab";
                    Id = "Id_Cotizacion_Venta";
                }
                else if (Tipo_Documento == Documentos_Id.Doc_DevolucionCliente)
                {
                    Tabla = "dbo_Trans_Devolucion_Cliente_Cab";
                    Id = "Id_Devolucion_Cliente";
                }
                else if (Tipo_Documento == Documentos_Id.Doc_NotaCreditoCliente)
                {
                    Tabla = "dbo_Trans_Nota_Credito_Cliente_Cab";
                    Id = "Id_Nota_Credito_Cliente";
                }

                string Query = @"
                UPDATE @@Tabla
                    
                    SET 
                    
                    Id_Almacen = @Id_Almacen,
                    Id_Colaborador = @Id_Colaborador,
                    Id_Sucursal = @Id_Sucursal,
                    Id_FormaPago = @Id_FormaPago,
                    Id_MetodoPago = @Id_MetodoPago,
                    Fecha_Documento = @Fecha_Documento,
                    Fecha_Vencimiento = @Fecha_Vencimiento,
                    Fecha_Entrega = @Fecha_Entrega,
                    Descripcion = @Descripcion,
                    Referencia = @Referencia,
                    Encabezado = @Encabezado,
                    Pie = @Pie,                                        
                    Fecha_Mantto = NOW(),
                    Usuario_Mantto = @Usuario_Mantto
                    
                    WHERE @@Id_Documento = @Id
                    
                    ".Replace("@@Tabla", Tabla).Replace("@@Id_Documento", Id);


                OleDbCommand command = new OleDbCommand(Query);

                command.Parameters.AddWithValue("@Id_Almacen", Id_Almacen);
                command.Parameters.AddWithValue("@Id_Colaborador", Id_Colaborador);
                command.Parameters.AddWithValue("@Id_Sucursal", Id_Sucursal);
                command.Parameters.AddWithValue("@Id_Forma_Pago", Id_Forma_Pago);
                command.Parameters.AddWithValue("@Id_Metodo_Pago", Id_Metodo_Pago);
                command.Parameters.AddWithValue("@Fecha_Documento", Fecha_Documento);
                command.Parameters.AddWithValue("@Fecha_Vencimiento", Fecha_Vencimiento);
                command.Parameters.AddWithValue("@Fecha_Entrega", Fecha_Entrega);
                command.Parameters.AddWithValue("@Descripcion", Descripcion.Replace("'", "''"));
                command.Parameters.AddWithValue("@Referencia", Referencia.Replace("'", "''"));
                command.Parameters.AddWithValue("@Encabezado", Encabezado.Replace("'", "''"));
                command.Parameters.AddWithValue("@Pie", Pie.Replace("'", "''"));
                command.Parameters.AddWithValue("@Usuario_Mantto", this._Usuario);
                command.Parameters.AddWithValue("@Id", Id_Documento.ToString());

                if (Id_Almacen == -1)
                    command.Parameters["@Id_Almacen"].Value = DBNull.Value;

                if (Id_Colaborador == -1)
                    command.Parameters["@Id_Colaborador"].Value = DBNull.Value;

                if (Id_Sucursal == -1)
                    command.Parameters["@Id_Sucursal"].Value = DBNull.Value;

                if (Id_Forma_Pago == -1)
                    command.Parameters["@Id_Forma_Pago"].Value = DBNull.Value;

                if (Id_Metodo_Pago == -1)
                    command.Parameters["@Id_Metodo_Pago"].Value = DBNull.Value;

                return SrvDB.ExecuteQuery_Update(command);
            }
            catch (Exception Ex)
            {
                return new Respuesta(2, Ex.Message);
            }
        }

        public Respuesta Updata_Documento_Estatus(

            int Id_Documento,
            Documentos_Id Tipo_Documento,
            EstatusDocs_Id NuevoEstatus
        )
        {
            string Tabla = "";
            string Id = "";

            if (Tipo_Documento == Documentos_Id.Doc_FacturaCliente)
            {
                Tabla = "dbo_Trans_Factura_Cliente_Cab";
                Id = "Id_Factura_Cliente";
            }
            else if (Tipo_Documento == Documentos_Id.Doc_Remision)
            {
                Tabla = "dbo_Trans_Remision_Cab";
                Id = "Id_Remision";
            }
            else if (Tipo_Documento == Documentos_Id.Doc_Pedido)
            {
                Tabla = "dbo_Trans_Pedido_Cab";
                Id = "Id_Pedido";
            }
            else if (Tipo_Documento == Documentos_Id.Doc_CotizacionVenta)
            {
                Tabla = "dbo_Trans_Cotizacion_Venta_Cab";
                Id = "Id_Cotizacion_Venta";
            }
            else if (Tipo_Documento == Documentos_Id.Doc_DevolucionCliente)
            {
                Tabla = "dbo_Trans_Devolucion_Cliente_Cab";
                Id = "Id_Devolucion_Cliente";
            }
            else if (Tipo_Documento == Documentos_Id.Doc_NotaCreditoCliente)
            {
                Tabla = "dbo_Trans_Nota_Credito_Cliente_Cab";
                Id = "Id_Nota_Credito_Cliente";
            }

            if (NuevoEstatus == EstatusDocs_Id.Estatus_Doc_Asentado)
            {
                DataTable dt_Doc = Get_Documento_By_Id(Tipo_Documento, Id_Documento);
                string Aux_Id_Cliente = String.IsNullOrEmpty(dt_Doc.Rows[0]["Id_Cliente"].ToString()) ? "-1" : dt_Doc.Rows[0]["Id_Cliente"].ToString();
                string Aux_Id_Almacen = String.IsNullOrEmpty(dt_Doc.Rows[0]["Id_Almacen"].ToString()) ? "-1" : dt_Doc.Rows[0]["Id_Almacen"].ToString();
                string Aux_Id_Colaborador = String.IsNullOrEmpty(dt_Doc.Rows[0]["Id_Colaborador"].ToString()) ? "-1" : dt_Doc.Rows[0]["Id_Colaborador"].ToString();
                string Aux_Id_Campana = String.IsNullOrEmpty(dt_Doc.Rows[0]["Id_Campana"].ToString()) ? "-1" : dt_Doc.Rows[0]["Id_Campana"].ToString();
                string Aux_Id_Sucursal = String.IsNullOrEmpty(dt_Doc.Rows[0]["Id_Sucursal"].ToString()) ? "-1" : dt_Doc.Rows[0]["Id_Sucursal"].ToString();
                string Aux_Id_Serie = String.IsNullOrEmpty(dt_Doc.Rows[0]["Id_Serie"].ToString()) ? "-1" : dt_Doc.Rows[0]["Id_Serie"].ToString();
                string Aux_Id_Forma_Pago = String.IsNullOrEmpty(dt_Doc.Rows[0]["Id_FormaPago"].ToString()) ? "-1" : dt_Doc.Rows[0]["Id_FormaPago"].ToString();
                string Aux_Id_Metodo_Pago = String.IsNullOrEmpty(dt_Doc.Rows[0]["Id_MetodoPago"].ToString()) ? "-1" : dt_Doc.Rows[0]["Id_MetodoPago"].ToString();

                string FE = "";
                if ((FuncionesClass.ConsultaFE(this._RFC) == 1) && (Tipo_Documento == Documentos_Id.Doc_FacturaCliente || Tipo_Documento == Documentos_Id.Doc_DevolucionCliente || Tipo_Documento == Documentos_Id.Doc_NotaCreditoCliente))
                    FE = "1";
                else
                    FE = "0";

                string QueryAsentado = @"

                    UPDATE @@Tabla
                        SET 
                            Foto_Cliente_RFC = DFirst('RFC_Cliente', 'dbo_Cat_Cliente', 'Id_Cliente = @@Id_Cliente'),
                            Foto_Cliente_RazonSocial = DFirst('Razon_Social', 'dbo_Cat_Cliente', 'Id_Cliente = @@Id_Cliente'),
                            Foto_Almacen = DFirst('Descripcion', 'dbo_Cat_Almacen', 'Id_Almacen = @@Id_Almacen'),
                            Foto_Colaborador = DFirst('Nombre', 'dbo_Cat_Colaborador', 'Id_Colaborador = @@Id_Colaborador'),
                            Foto_Campana = DFirst('Nombre', 'dbo_Cat_Campana', 'Id_Campana = @@Id_Campana'),
                            Foto_Sucursal = DFirst('Nombre', 'dbo_Cat_Sucursal', 'Id_Sucursal = @@Id_Sucursal'),
                            Foto_Serie = DFirst('Nombre', 'dbo_Cat_Empresa_Serie', 'Id_Serie = @@Id_Serie'),
                            Foto_FormaPago = DFirst('Nombre', 'dbo_Cat_Forma_Pago', 'Id_Forma_Pago = @@Id_Forma_Pago'),
                            Foto_MetodoPago  = DFirst('Nombre', 'dbo_Cat_Metodo_Pago', 'Id_Metodo_Pago = @@Id_Metodo_Pago'),
                            Is_FE = @@Is_FE
                        WHERE @@Id_Desc = @@Id
                ".Replace("@@Tabla", Tabla)
                 .Replace("@@Id_Desc", Id)
                 .Replace("@@Id_Cliente", Aux_Id_Cliente)
                 .Replace("@@Id_Almacen", Aux_Id_Almacen)
                 .Replace("@@Id_Colaborador", Aux_Id_Colaborador)
                 .Replace("@@Id_Campana", Aux_Id_Campana)
                 .Replace("@@Id_Sucursal", Aux_Id_Sucursal)
                 .Replace("@@Id_Serie", Aux_Id_Serie)
                 .Replace("@@Id_Forma_Pago", Aux_Id_Forma_Pago)
                 .Replace("@@Id_Metodo_Pago", Aux_Id_Metodo_Pago)
                 .Replace("@@Is_FE", FE)
                 .Replace("@@Id", Id_Documento.ToString());

                SrvDB.ExecuteQuery_Update(QueryAsentado);
            }

            string Query = @"

                UPDATE @@Tabla SET Estatus = @@Estatus WHERE @@Id_Documento = @@Id
            ".Replace("@@Tabla", Tabla)
             .Replace("@@Estatus", NuevoEstatus.GetHashCode().ToString())
             .Replace("@@Id_Documento", Id)
             .Replace("@@Id", Id_Documento.ToString());

            return SrvDB.ExecuteQuery_Update(Query);
        }

        #endregion

        #region SELECT

        public DataTable Get_Documento_By_Id(Documentos_Id Tipo_Documento, int Id_Documento)
        {
            string Tabla = "";
            string Id = "";

            if (Tipo_Documento == Documentos_Id.Doc_FacturaCliente)
            {
                Tabla = "dbo_Trans_Factura_Cliente_Cab";
                Id = "Id_Factura_Cliente";
            }
            else if (Tipo_Documento == Documentos_Id.Doc_Remision)
            {
                Tabla = "dbo_Trans_Remision_Cab";
                Id = "Id_Remision";
            }
            else if (Tipo_Documento == Documentos_Id.Doc_Pedido)
            {
                Tabla = "dbo_Trans_Pedido_Cab";
                Id = "Id_Pedido";
            }
            else if (Tipo_Documento == Documentos_Id.Doc_CotizacionVenta)
            {
                Tabla = "dbo_Trans_Cotizacion_Venta_Cab";
                Id = "Id_Cotizacion_Venta";
            }
            else if (Tipo_Documento == Documentos_Id.Doc_DevolucionCliente)
            {
                Tabla = "dbo_Trans_Devolucion_Cliente_Cab";
                Id = "Id_Devolucion_Cliente";
            }
            else if (Tipo_Documento == Documentos_Id.Doc_NotaCreditoCliente)
            {
                Tabla = "dbo_Trans_Nota_Credito_Cliente_Cab";
                Id = "Id_Nota_Credito_Cliente";
            }

            else if (Tipo_Documento == Documentos_Id.Doc_ReciboArrendamientoVentas)
            {
                Tabla = "dbo_Trans_ReciboArrendamiento_Cliente_Cab";
                Id = "Id_ReciboArrendamiento_Cliente";
            }
            else if (Tipo_Documento == Documentos_Id.Doc_ReciboHonorariosVentas)
            {
                Tabla = "dbo_Trans_ReciboHonorarios_Cliente_Cab";
                Id = "Id_ReciboHonorarios_Cliente";
            }

            string Query = @"
                            SELECT 
                                A1.*,
								A2.RFC_Cliente AS Desc_Cliente,
								A3.Descripcion AS Desc_Almacen,
								A4.Nombre AS Desc_Colaborador,
								A5.Nombre AS Desc_Moneda,
								A6.Nombre AS Desc_Sucursal,
								A7.Nombre AS Desc_FormaPago,
								A8.Nombre AS Desc_MetodoPago,
                                A9.Nombre AS Desc_Serie,
                                A10.Nombre AS Desc_Campana

                            FROM (((((((((@@Tabla AS A1
                            
                                LEFT JOIN dbo_Cat_Cliente       AS A2 ON A1.Id_Cliente = A2.Id_Cliente)
                                LEFT JOIN dbo_Cat_Almacen       AS A3 ON A1.Id_Almacen = A3.Id_Almacen)
                                LEFT JOIN dbo_Cat_Colaborador       AS A4 ON A1.Id_Colaborador = A4.Id_Colaborador)
                                LEFT JOIN dbo_Cat_Moneda       AS A5 ON A1.Id_Moneda = A5.Id_Moneda)
                                LEFT JOIN dbo_Cat_Sucursal       AS A6 ON A1.Id_Sucursal = A6.Id_Sucursal)
                                LEFT JOIN dbo_Cat_Forma_Pago       AS A7 ON A1.Id_FormaPago = A7.Id_Forma_Pago)
                                LEFT JOIN dbo_Cat_Metodo_Pago       AS A8 ON A1.Id_MetodoPago = A8.Id_Metodo_Pago)
                                LEFT JOIN dbo_Cat_Empresa_Serie       AS A9 ON A1.Id_Serie = A9.Id_Serie)
                                LEFT JOIN dbo_Cat_Campana       AS A10 ON A1.Id_Campana = A10.Id_Campana)
        
                            WHERE A1.@@Id_Documento = @@Id";

            Query = Query.Replace("@@RFC", this._RFC);
            Query = Query.Replace("@@Tabla", Tabla);
            Query = Query.Replace("@@Id_Documento", Id);
            Query = Query.Replace("@@Id", Id_Documento.ToString());

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Documentos(Documentos_Id Tipo_Documento)
        {
            string Tabla = "";
            string Id = SIIE_ERP.BaseDatos.Bancos.Documentos.Get_Table_Id(Tipo_Documento);

            if (Tipo_Documento == Documentos_Id.Doc_FacturaCliente)
            {
                Tabla = "dbo_Trans_Factura_Cliente_Cab";

            }
            else if (Tipo_Documento == Documentos_Id.Doc_Remision)
            {
                Tabla = "dbo_Trans_Remision_Cab";

            }
            else if (Tipo_Documento == Documentos_Id.Doc_Pedido)
            {
                Tabla = "dbo_Trans_Pedido_Cab";

            }
            else if (Tipo_Documento == Documentos_Id.Doc_CotizacionVenta)
            {
                Tabla = "dbo_Trans_Cotizacion_Venta_Cab";

            }
            else if (Tipo_Documento == Documentos_Id.Doc_DevolucionCliente)
            {
                Tabla = "dbo_Trans_Devolucion_Cliente_Cab";

            }
            else if (Tipo_Documento == Documentos_Id.Doc_NotaCreditoCliente)
            {
                Tabla = "dbo_Trans_Nota_Credito_Cliente_Cab";

            }

            string Query = @"

                SELECT 

                    A1.*, 
                    A2.Descripcion AS Desc_Almacen, 
                    A3.Nombre AS Desc_Serie,
                    A4.Nombre AS Desc_Estatus,
                    A5.Razon_Social AS Desc_Cliente

                FROM 

                    ((((@@Tabla AS A1 
                    INNER JOIN dbo_Cat_Almacen AS A2 ON A1.Id_Almacen = A2.Id_Almacen)
                    INNER JOIN dbo_Cat_Empresa_Serie AS A3 ON A3.Id_Serie = A1.Id_Serie)
                    INNER JOIN dbo_Cat_Estatus AS A4 ON A4.Estatus = A1.Estatus)
                    INNER JOIN dbo_Cat_Cliente AS A5 ON A5.Id_Cliente = A1.Id_Cliente)

                WHERE A1.RFC = '@@RFC' ORDER BY A1.@@Id DESC

            ";

            Query = Query.Replace("@@RFC", this._RFC);
            Query = Query.Replace("@@Tabla", Tabla);
            Query = Query.Replace("@@Id", Id);

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Documentos_Pipeline(Documentos_Id Tipo_Documento, int Id_Campana, int Id_GrupoClientes, int Id_Cliente, int Id_Colaborador, int Tiempo)
        {
            string Tabla = "";
            string Id = SIIE_ERP.BaseDatos.Bancos.Documentos.Get_Table_Id(Tipo_Documento);

            if (Tipo_Documento == Documentos_Id.Doc_FacturaCliente)
            {
                Tabla = "dbo_Trans_Factura_Cliente_Cab";

            }
            else if (Tipo_Documento == Documentos_Id.Doc_Remision)
            {
                Tabla = "dbo_Trans_Remision_Cab";

            }
            else if (Tipo_Documento == Documentos_Id.Doc_Pedido)
            {
                Tabla = "dbo_Trans_Pedido_Cab";

            }
            else if (Tipo_Documento == Documentos_Id.Doc_CotizacionVenta)
            {
                Tabla = "dbo_Trans_Cotizacion_Venta_Cab";

            }
            else if (Tipo_Documento == Documentos_Id.Doc_DevolucionCliente)
            {
                Tabla = "dbo_Trans_Devolucion_Cliente_Cab";

            }
            else if (Tipo_Documento == Documentos_Id.Doc_NotaCreditoCliente)
            {
                Tabla = "dbo_Trans_Nota_Credito_Cliente_Cab";

            }

            string Query = @"

                SELECT 

                    A1.*, 
                    A2.Descripcion AS Desc_Almacen, 
                    A3.Nombre AS Desc_Serie,
                    A4.Nombre AS Desc_Estatus,
                    A5.Razon_Social AS Desc_Cliente

                FROM 

                    ((((@@Tabla AS A1 
                    INNER JOIN dbo_Cat_Almacen AS A2 ON A1.Id_Almacen = A2.Id_Almacen)
                    INNER JOIN dbo_Cat_Empresa_Serie AS A3 ON A3.Id_Serie = A1.Id_Serie)
                    INNER JOIN dbo_Cat_Estatus AS A4 ON A4.Estatus = A1.Estatus)
                    INNER JOIN dbo_Cat_Cliente AS A5 ON A5.Id_Cliente = A1.Id_Cliente)

                WHERE A1.RFC = '@@RFC' 

                    AND A1.Estatus = 410
                    AND (@@Id_Campana = -1 OR A1.Id_Campana = @@Id_Campana)
                    AND (@@Id_Cliente = -1 OR A1.Id_Cliente = @@Id_Cliente)
                    AND (@@Id_Cliente = -1 OR A1.Id_Cliente = @@Id_Cliente)
                    AND (@@Id_Colaborador = -1 OR A1.Id_Colaborador = @@Id_Colaborador)
                    AND (@@Id_GrupoClientes = -1 OR A5.Id_GrupoClientes = @@Id_GrupoClientes)

                    AND
                    (
					(@@Tiempo = 1 and Year(A1.Fecha_Alta) = Year(NOW()) and Month(A1.Fecha_Alta) = Month(NOW())) or
					(@@Tiempo = 2 and Year(A1.Fecha_Alta) = Year(NOW()) and ((Month(A1.Fecha_Alta) >= 10 and Month(A1.Fecha_Alta) <= 12 and Month(NOW()) >= 10 and Month(NOW()) <= 12) or (Month(A1.Fecha_Alta) >= 7 and Month(A1.Fecha_Alta) <= 9 and Month(NOW()) >= 7 and Month(NOW()) <= 9) or (Month(A1.Fecha_Alta) >= 4 and Month(A1.Fecha_Alta) <= 6 and Month(NOW()) >= 4 and Month(NOW()) <= 6) or (Month(A1.Fecha_Alta) >= 1 and Month(A1.Fecha_Alta) <= 3 and Month(NOW()) >= 1 and Month(NOW()) <= 3))) or
					(@@Tiempo = 3 and Year(A1.Fecha_Alta) = Year(NOW()) and ((Month(A1.Fecha_Alta) >= 7 and Month(A1.Fecha_Alta) <= 12 and Month(NOW()) >= 7 and Month(NOW()) <= 12) or (Month(A1.Fecha_Alta) >= 1 and Month(A1.Fecha_Alta) <= 6 and Month(NOW()) >= 1 and Month(NOW()) <= 6))) or
					(@@Tiempo = 4 and Year(A1.Fecha_Alta) = Year(NOW())) or
					(@@Tiempo = 5 and Year(A1.Fecha_Alta) = Year(DateAdd('yyyy',-1,NOW())))
					)

                ORDER BY A1.@@Id DESC

            ";

            Query = Query.Replace("@@RFC", this._RFC);
            Query = Query.Replace("@@Tabla", Tabla);

            Query = Query.Replace("@@Tiempo", Tiempo.ToString());
            Query = Query.Replace("@@Id_GrupoClientes", Id_GrupoClientes.ToString());
            Query = Query.Replace("@@Id_Colaborador", Id_Colaborador.ToString());
            Query = Query.Replace("@@Id_Cliente", Id_Cliente.ToString());
            Query = Query.Replace("@@Id_Campana", Id_Campana.ToString());
            Query = Query.Replace("@@Id", Id);

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Documentos_By_IdCliente(Documentos_Id Tipo_Documento, int Id_Cliente, EstatusDocs_Id Estatus, int Id_Moneda)
        {
            string Tabla = "";


            if (Tipo_Documento == Documentos_Id.Doc_FacturaCliente)
            {
                Tabla = "dbo_Trans_Factura_Cliente_Cab";

            }
            else if (Tipo_Documento == Documentos_Id.Doc_Remision)
            {
                Tabla = "dbo_Trans_Remision_Cab";

            }
            else if (Tipo_Documento == Documentos_Id.Doc_Pedido)
            {
                Tabla = "dbo_Trans_Pedido_Cab";

            }
            else if (Tipo_Documento == Documentos_Id.Doc_CotizacionVenta)
            {
                Tabla = "dbo_Trans_Cotizacion_Venta_Cab";

            }
            else if (Tipo_Documento == Documentos_Id.Doc_DevolucionCliente)
            {
                Tabla = "dbo_Trans_Devolucion_Cliente_Cab";

            }
            else if (Tipo_Documento == Documentos_Id.Doc_NotaCreditoCliente)
            {
                Tabla = "dbo_Trans_Nota_Credito_Cliente_Cab";

            }

            string Query = "SELECT * FROM @@Tabla WHERE Id_Cliente = @@Id_Cliente AND Estatus = @@Estatus AND Id_Moneda = @@Id_Moneda";
            Query = Query.Replace("@@Id_Moneda", Id_Moneda.ToString());
            Query = Query.Replace("@@Id_Cliente", Id_Cliente.ToString());
            Query = Query.Replace("@@Estatus", Estatus.GetHashCode().ToString());
            Query = Query.Replace("@@Tabla", Tabla);

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Report_Saldos()
        {
            string Query = @"
                
                SELECT 
			        1 AS EsFactura, 
			        'Factura' AS Tipo_Doc, 
			        a.RFC, 
			        a.Id_Factura_Cliente AS Id_Doc, 
			        a.Secuencia, 
			        a.Fecha_Documento AS Fecha_Doc, 
			        a.Fecha_Vencimiento, 
			        a.Total, 
			        a.Saldo,			
			        DATEDIFF('d', a.Fecha_Vencimiento, NOW()) AS Días_Retraso,
			
			        Switch(
		                Datediff('d', [Fecha_Vencimiento], NOW()) <= 0, [Saldo] * [TipoCambio],
		                true, 0
                    ) AS B0_Corriente,
			
			
			        Switch(
		                Datediff('d', [Fecha_Vencimiento], NOW()) BETWEEN 1 AND 15, [Saldo] * [TipoCambio],
		                true, 0
                    ) AS B1_01_15,
			
			        Switch(
		                Datediff('d', [Fecha_Vencimiento], NOW()) BETWEEN 16 AND 30, [Saldo] * [TipoCambio],
		                true, 0
                    ) AS B2_16_30,
			
			        Switch(
		                Datediff('d', [Fecha_Vencimiento], NOW()) BETWEEN 31 AND 45, [Saldo] * [TipoCambio],
		                true, 0
                    ) AS B3_31_45,
			
			        Switch(
		                Datediff('d', [Fecha_Vencimiento], NOW()) BETWEEN 46 AND 60, [Saldo] * [TipoCambio],
		                true, 0
                    ) AS B4_46_60,

			
			        Switch(
		                Datediff('d', [Fecha_Vencimiento], NOW()) BETWEEN 61 AND 90, [Saldo] * [TipoCambio],
		                true, 0
                    ) AS B5_61_90,

			
			        Switch(
		                Datediff('d', [Fecha_Vencimiento], NOW()) > 90, [Saldo] * [TipoCambio],
		                true, 0
                    ) AS B6_Mas_90,	
			
			        dbo_Cat_Cliente.Id_Cliente, 
			        dbo_Cat_Cliente.RFC_Cliente, 
			        dbo_Cat_Cliente.Razon_Social, 
			        dbo_Cat_Cliente.Nombre_Comercial, 
			        dbo_Cat_Colaborador.Id_Colaborador, 
			        dbo_Cat_Colaborador.Nombre AS Colaborador, 
			        dbo_Cat_Moneda.Clave AS Clave_Moneda, 
			        dbo_Cat_TipoCambio.TipoCambio
            
		        FROM
			
			        ((((dbo_Trans_Factura_Cliente_Cab AS a 
			
			        INNER JOIN dbo_Cat_Cliente ON a.Id_Cliente = dbo_Cat_Cliente.Id_Cliente )
			        INNER JOIN dbo_Cat_Colaborador ON a.Id_Colaborador = dbo_Cat_Colaborador.Id_Colaborador )
			        INNER JOIN dbo_Cat_Moneda ON a.Id_Moneda = dbo_Cat_Moneda.Id_Moneda )
			        INNER JOIN dbo_Cat_TipoCambio ON dbo_Cat_Moneda.Id_Moneda = dbo_Cat_TipoCambio.Id_Moneda )
                WHERE
		            (a.Saldo <> 0) AND (a.RFC = '@@RFC')  AND (a.Estatus = 410)

                UNION ALL 

                SELECT 
			            0 AS EsFactura, 
                        'Remisión' AS Tipo_Doc, 
			            a.RFC, 
                        a.Id_Remision AS Id_Doc, 
			            a.Secuencia, 
			            a.Fecha_Documento AS Fecha_Doc, 
			            a.Fecha_Vencimiento, 
			            a.Total, 
			            a.Saldo,			
			            DATEDIFF('d', a.Fecha_Vencimiento, NOW()) AS Días_Retraso,
			
			            Switch(
		                    Datediff('d', [Fecha_Vencimiento], NOW()) <= 0, [Saldo] * [TipoCambio],
		                    true, 0
                        ) AS B0_Corriente,
			
			
			            Switch(
		                    Datediff('d', [Fecha_Vencimiento], NOW()) BETWEEN 1 AND 15, [Saldo] * [TipoCambio],
		                    true, 0
                        ) AS B1_01_15,
			
			            Switch(
		                    Datediff('d', [Fecha_Vencimiento], NOW()) BETWEEN 16 AND 30, [Saldo] * [TipoCambio],
		                    true, 0
                        ) AS B2_16_30,
			
			            Switch(
		                    Datediff('d', [Fecha_Vencimiento], NOW()) BETWEEN 31 AND 45, [Saldo] * [TipoCambio],
		                    true, 0
                        ) AS B3_31_45,
			
			            Switch(
		                    Datediff('d', [Fecha_Vencimiento], NOW()) BETWEEN 46 AND 60, [Saldo] * [TipoCambio],
		                    true, 0
                        ) AS B4_46_60,

			
			            Switch(
		                    Datediff('d', [Fecha_Vencimiento], NOW()) BETWEEN 61 AND 90, [Saldo] * [TipoCambio],
		                    true, 0
                        ) AS B5_61_90,

			
			            Switch(
		                    Datediff('d', [Fecha_Vencimiento], NOW()) > 90, [Saldo] * [TipoCambio],
		                    true, 0
                        ) AS B6_Mas_90,	
			
			            dbo_Cat_Cliente.Id_Cliente, 
			            dbo_Cat_Cliente.RFC_Cliente, 
			            dbo_Cat_Cliente.Razon_Social, 
			            dbo_Cat_Cliente.Nombre_Comercial, 
			            dbo_Cat_Colaborador.Id_Colaborador, 
			            dbo_Cat_Colaborador.Nombre AS Colaborador, 
			            dbo_Cat_Moneda.Clave AS Clave_Moneda, 
			            dbo_Cat_TipoCambio.TipoCambio
            
		            FROM
			
			            ((((dbo_Trans_Remision_Cab AS a 
			
			            INNER JOIN dbo_Cat_Cliente ON a.Id_Cliente = dbo_Cat_Cliente.Id_Cliente )
			            INNER JOIN dbo_Cat_Colaborador ON a.Id_Colaborador = dbo_Cat_Colaborador.Id_Colaborador )
			            INNER JOIN dbo_Cat_Moneda ON a.Id_Moneda = dbo_Cat_Moneda.Id_Moneda )
			            INNER JOIN dbo_Cat_TipoCambio ON dbo_Cat_Moneda.Id_Moneda = dbo_Cat_TipoCambio.Id_Moneda )
                    WHERE
		                (a.Saldo <> 0) AND (a.RFC = '@@RFC') AND (a.Estatus = 410)
                         
            ";

            Query = Query.Replace("@@RFC", this._RFC);

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Report_CFDi(Documentos_Id Tipo_Documento, int Id_Documento)
        {
            string Tabla = "";
            string Id = "";

            if (Tipo_Documento == Documentos_Id.Doc_FacturaCliente)
            {
                Tabla = "dbo_Trans_Factura_Cliente_Cab";
                Id = "Id_Factura_Cliente";
            }
            else if (Tipo_Documento == Documentos_Id.Doc_Remision)
            {
                Tabla = "dbo_Trans_Remision_Cab";
                Id = "Id_Remision";
            }
            else if (Tipo_Documento == Documentos_Id.Doc_Pedido)
            {
                Tabla = "dbo_Trans_Pedido_Cab";
                Id = "Id_Pedido";
            }
            else if (Tipo_Documento == Documentos_Id.Doc_CotizacionVenta)
            {
                Tabla = "dbo_Trans_Cotizacion_Venta_Cab";
                Id = "Id_Cotizacion_Venta";
            }
            else if (Tipo_Documento == Documentos_Id.Doc_DevolucionCliente)
            {
                Tabla = "dbo_Trans_Devolucion_Cliente_Cab";
                Id = "Id_Devolucion_Cliente";
            }
            else if (Tipo_Documento == Documentos_Id.Doc_NotaCreditoCliente)
            {
                Tabla = "dbo_Trans_Nota_Credito_Cliente_Cab";
                Id = "Id_Nota_Credito_Cliente";
            }
            else if (Tipo_Documento == Documentos_Id.Doc_ReciboArrendamientoVentas)
            {
                Tabla = "dbo_Trans_ReciboArrendamiento_Cliente_Cab";
                Id = "Id_ReciboArrendamiento_Cliente";
            }
            else if (Tipo_Documento == Documentos_Id.Doc_ReciboHonorariosVentas)
            {
                Tabla = "dbo_Trans_ReciboHonorarios_Cliente_Cab";
                Id = "Id_ReciboHonorarios_Cliente";
            }

            string Query = @"
                
                SELECT        

	                TF.UUID, 
	                TF.FechaTimbrado, 
	                TF.selloCFD, 
	                TF.NoCertificadoSAT, 
	                TF.SelloSAT, 
	                C.Id_Documento, 
	                C.FormaDePago, 
	                C.MetodoDePago, 
	                Fact.QR, 
	                C.NoCertificado

                FROM

	                ((dbo_CFDI_Comprobante AS C 
	                INNER JOIN dbo_CFDI_TimbreFiscalDigital AS TF ON TF.Id_CFDI_Comprobante = C.Id_CFDI_Comprobante )
	                INNER JOIN @@Tabla AS Fact ON Fact.@@Id = C.Id_Documento )

                WHERE 

                    (c.Id_Documento = @@Id_Documento) 
                AND (c.Id_TipoDocumento = @@Id_TipoDocumento)
                           
            ";

            Query = Query.Replace("@@Tabla", Tabla);
            Query = Query.Replace("@@RFC", this._RFC);
            Query = Query.Replace("@@Id_TipoDocumento", Tipo_Documento.GetHashCode().ToString());
            Query = Query.Replace("@@Id_Documento", Id_Documento.ToString());
            Query = Query.Replace("@@Id", Id);

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Report_GraficaMaster(int CriterioGrupo, int Valor, int Id_Articulo, int Id_Almacen, int Id_Grupo, int Id_Subgrupo, int Id_Linea, int Id_Talla, int Id_Color, int Id_Colaborador, int Id_GrupoClientes, int Id_Cliente, int Anio, int M01, int M02, int M03, int M04, int M05, int M06, int M07, int M08, int M09, int M10, int M11, int M12, int TipoVenta, string Top)
        {
            //Total
            if (TipoVenta == 1)
            {

                DataTable dt_Factura = Get_Report_GraficaMaster_Factura(CriterioGrupo, Valor, Id_Articulo, Id_Almacen, Id_Grupo, Id_Subgrupo, Id_Linea, Id_Talla, Id_Color, Id_Colaborador, Id_GrupoClientes, Id_Cliente, Anio, M01, M02, M03, M04, M05, M06, M07, M08, M09, M10, M11, M12);
                DataTable dt_Remision = Get_Report_GraficaMaster_Remision(CriterioGrupo, Valor, Id_Articulo, Id_Almacen, Id_Grupo, Id_Subgrupo, Id_Linea, Id_Talla, Id_Color, Id_Colaborador, Id_GrupoClientes, Id_Cliente, Anio, M01, M02, M03, M04, M05, M06, M07, M08, M09, M10, M11, M12);
                DataTable dt_ReciboHonorarios = Get_Report_GraficaMaster_ReciboHonorarios(CriterioGrupo, Valor, Id_Articulo, Id_Almacen, Id_Grupo, Id_Subgrupo, Id_Linea, Id_Talla, Id_Color, Id_Colaborador, Id_GrupoClientes, Id_Cliente, Anio, M01, M02, M03, M04, M05, M06, M07, M08, M09, M10, M11, M12);
                DataTable dt_ReciboArrendamiento = Get_Report_GraficaMaster_ReciboArrendamiento(CriterioGrupo, Valor, Id_Articulo, Id_Almacen, Id_Grupo, Id_Subgrupo, Id_Linea, Id_Talla, Id_Color, Id_Colaborador, Id_GrupoClientes, Id_Cliente, Anio, M01, M02, M03, M04, M05, M06, M07, M08, M09, M10, M11, M12);
                DataTable dt_Tickets = Get_Report_GraficaMaster_Tickets(CriterioGrupo, Valor, Id_Articulo, Id_Almacen, Id_Grupo, Id_Subgrupo, Id_Linea, Id_Talla, Id_Color, Id_Colaborador, Id_GrupoClientes, Id_Cliente, Anio, M01, M02, M03, M04, M05, M06, M07, M08, M09, M10, M11, M12);

                //Establecemos Ceros para los valores nulos

                for (int i = 0; i < dt_Factura.Rows.Count; i++)
                {
                    if (String.IsNullOrEmpty(dt_Factura.Rows[i]["Valor"].ToString()))
                        dt_Factura.Rows[i]["Valor"] = "0";
                }
                for (int i = 0; i < dt_Remision.Rows.Count; i++)
                {
                    if (String.IsNullOrEmpty(dt_Remision.Rows[i]["Valor"].ToString()))
                        dt_Remision.Rows[i]["Valor"] = "0";
                }
                for (int i = 0; i < dt_ReciboHonorarios.Rows.Count; i++)
                {
                    if (String.IsNullOrEmpty(dt_ReciboHonorarios.Rows[i]["Valor"].ToString()))
                        dt_ReciboHonorarios.Rows[i]["Valor"] = "0";
                }
                for (int i = 0; i < dt_ReciboArrendamiento.Rows.Count; i++)
                {
                    if (String.IsNullOrEmpty(dt_ReciboArrendamiento.Rows[i]["Valor"].ToString()))
                        dt_ReciboArrendamiento.Rows[i]["Valor"] = "0";
                }
                for (int i = 0; i < dt_Tickets.Rows.Count; i++)
                {
                    if (String.IsNullOrEmpty(dt_Tickets.Rows[i]["Valor"].ToString()))
                        dt_Tickets.Rows[i]["Valor"] = "0";
                }

                for (int i = 0; i < dt_Remision.Rows.Count; i++)
                {
                    string searchAuthor = dt_Remision.Rows[i]["Grupo"].ToString();
                    bool contains = dt_Factura.AsEnumerable().Any(row => searchAuthor == row.Field<String>("Grupo"));

                    if (contains)
                    {
                        for (int j = 0; j < dt_Factura.Rows.Count; j++)
                        {
                            if (dt_Factura.Rows[j]["Grupo"].ToString().Equals(dt_Remision.Rows[i]["Grupo"].ToString()))
                            {
                                dt_Factura.Rows[j]["Valor"] = (Double.Parse(dt_Factura.Rows[j]["Valor"].ToString()) + Double.Parse(dt_Remision.Rows[i]["Valor"].ToString())).ToString();
                            }
                        }
                    }
                    else
                    {
                        dt_Factura.Rows.Add(dt_Remision.Rows[i].ItemArray);
                    }
                }

                for (int i = 0; i < dt_ReciboHonorarios.Rows.Count; i++)
                {
                    string searchAuthor = dt_ReciboHonorarios.Rows[i]["Grupo"].ToString();
                    bool contains = dt_Factura.AsEnumerable().Any(row => searchAuthor == row.Field<String>("Grupo"));

                    if (contains)
                    {
                        for (int j = 0; j < dt_Factura.Rows.Count; j++)
                        {
                            if (dt_Factura.Rows[j]["Grupo"].ToString().Equals(dt_ReciboHonorarios.Rows[i]["Grupo"].ToString()))
                            {
                                dt_Factura.Rows[j]["Valor"] = (Double.Parse(dt_Factura.Rows[j]["Valor"].ToString()) + Double.Parse(dt_ReciboHonorarios.Rows[i]["Valor"].ToString())).ToString();
                            }
                        }
                    }
                    else
                    {
                        dt_Factura.Rows.Add(dt_ReciboHonorarios.Rows[i].ItemArray);
                    }
                }

                for (int i = 0; i < dt_ReciboArrendamiento.Rows.Count; i++)
                {
                    string searchAuthor = dt_ReciboArrendamiento.Rows[i]["Grupo"].ToString();
                    bool contains = dt_Factura.AsEnumerable().Any(row => searchAuthor == row.Field<String>("Grupo"));

                    if (contains)
                    {
                        for (int j = 0; j < dt_Factura.Rows.Count; j++)
                        {
                            if (dt_Factura.Rows[j]["Grupo"].ToString().Equals(dt_ReciboArrendamiento.Rows[i]["Grupo"].ToString()))
                            {
                                dt_Factura.Rows[j]["Valor"] = (Double.Parse(dt_Factura.Rows[j]["Valor"].ToString()) + Double.Parse(dt_ReciboArrendamiento.Rows[i]["Valor"].ToString())).ToString();
                            }
                        }
                    }
                    else
                    {
                        dt_Factura.Rows.Add(dt_ReciboArrendamiento.Rows[i].ItemArray);
                    }
                }

                for (int i = 0; i < dt_Tickets.Rows.Count; i++)
                {
                    string searchAuthor = dt_Tickets.Rows[i]["Grupo"].ToString();
                    bool contains = dt_Factura.AsEnumerable().Any(row => searchAuthor == row.Field<String>("Grupo"));

                    if (contains)
                    {
                        for (int j = 0; j < dt_Factura.Rows.Count; j++)
                        {
                            if (dt_Factura.Rows[j]["Grupo"].ToString().Equals(dt_Tickets.Rows[i]["Grupo"].ToString()))
                            {
                                dt_Factura.Rows[j]["Valor"] = (Double.Parse(dt_Factura.Rows[j]["Valor"].ToString()) + Double.Parse(dt_Tickets.Rows[i]["Valor"].ToString())).ToString();
                            }
                        }
                    }
                    else
                    {
                        dt_Factura.Rows.Add(dt_Tickets.Rows[i].ItemArray);
                    }
                }

                EnumerableRowCollection<DataRow> query;
                if(Top.Equals("Top"))
                {
                    query = from order in dt_Factura.AsEnumerable()
                            orderby order.Field<Double>("Valor") descending
                            select order;
                }
                else
                {
                    query = from order in dt_Factura.AsEnumerable()
                            orderby order.Field<Double>("Valor") ascending
                            select order;
                }

                return query.AsDataView().Table;  
            }
            //Facturas asentadas
            else if (TipoVenta == 2)
            {
                DataTable dt_Factura = Get_Report_GraficaMaster_Factura(CriterioGrupo, Valor, Id_Articulo, Id_Almacen, Id_Grupo, Id_Subgrupo, Id_Linea, Id_Talla, Id_Color, Id_Colaborador, Id_GrupoClientes, Id_Cliente, Anio, M01, M02, M03, M04, M05, M06, M07, M08, M09, M10, M11, M12);

                for (int i = 0; i < dt_Factura.Rows.Count; i++)
                {
                    if (String.IsNullOrEmpty(dt_Factura.Rows[i]["Valor"].ToString()))
                        dt_Factura.Rows[i]["Valor"] = "0";
                }

                EnumerableRowCollection<DataRow> query;
                if (Top.Equals("Top"))
                {
                    query = from order in dt_Factura.AsEnumerable()
                            orderby order.Field<Double>("Valor") descending
                            select order;
                }
                else
                {
                    query = from order in dt_Factura.AsEnumerable()
                            orderby order.Field<Double>("Valor") ascending
                            select order;
                }

                return query.AsDataView().Table;  
            }
            //Remisiones asentadas
            else if (TipoVenta == 3)
            {
                DataTable dt_Remision = Get_Report_GraficaMaster_Remision(CriterioGrupo, Valor, Id_Articulo, Id_Almacen, Id_Grupo, Id_Subgrupo, Id_Linea, Id_Talla, Id_Color, Id_Colaborador, Id_GrupoClientes, Id_Cliente, Anio, M01, M02, M03, M04, M05, M06, M07, M08, M09, M10, M11, M12);

                for (int i = 0; i < dt_Remision.Rows.Count; i++)
                {
                    if (String.IsNullOrEmpty(dt_Remision.Rows[i]["Valor"].ToString()))
                        dt_Remision.Rows[i]["Valor"] = "0";
                }

                EnumerableRowCollection<DataRow> query;
                if (Top.Equals("Top"))
                {
                    query = from order in dt_Remision.AsEnumerable()
                            orderby order.Field<Double>("Valor") descending
                            select order;
                }
                else
                {
                    query = from order in dt_Remision.AsEnumerable()
                            orderby order.Field<Double>("Valor") ascending
                            select order;
                }

                return query.AsDataView().Table;  
            }
            //Recibos de Honorarios asentados
            else if (TipoVenta == 4)
            {
                DataTable dt_ReciboHonorarios = Get_Report_GraficaMaster_ReciboHonorarios(CriterioGrupo, Valor, Id_Articulo, Id_Almacen, Id_Grupo, Id_Subgrupo, Id_Linea, Id_Talla, Id_Color, Id_Colaborador, Id_GrupoClientes, Id_Cliente, Anio, M01, M02, M03, M04, M05, M06, M07, M08, M09, M10, M11, M12);

                for (int i = 0; i < dt_ReciboHonorarios.Rows.Count; i++)
                {
                    if (String.IsNullOrEmpty(dt_ReciboHonorarios.Rows[i]["Valor"].ToString()))
                        dt_ReciboHonorarios.Rows[i]["Valor"] = "0";
                }

                EnumerableRowCollection<DataRow> query;
                if (Top.Equals("Top"))
                {
                    query = from order in dt_ReciboHonorarios.AsEnumerable()
                            orderby order.Field<Double>("Valor") descending
                            select order;
                }
                else
                {
                    query = from order in dt_ReciboHonorarios.AsEnumerable()
                            orderby order.Field<Double>("Valor") ascending
                            select order;
                }

                return query.AsDataView().Table;  
            }
            //Recibos de Arrendamiento asentados
            else if (TipoVenta == 5)
            {
                DataTable dt_ReciboArrendamiento = Get_Report_GraficaMaster_ReciboArrendamiento(CriterioGrupo, Valor, Id_Articulo, Id_Almacen, Id_Grupo, Id_Subgrupo, Id_Linea, Id_Talla, Id_Color, Id_Colaborador, Id_GrupoClientes, Id_Cliente, Anio, M01, M02, M03, M04, M05, M06, M07, M08, M09, M10, M11, M12);

                for (int i = 0; i < dt_ReciboArrendamiento.Rows.Count; i++)
                {
                    if (String.IsNullOrEmpty(dt_ReciboArrendamiento.Rows[i]["Valor"].ToString()))
                        dt_ReciboArrendamiento.Rows[i]["Valor"] = "0";
                }

                EnumerableRowCollection<DataRow> query;
                if (Top.Equals("Top"))
                {
                    query = from order in dt_ReciboArrendamiento.AsEnumerable()
                            orderby order.Field<Double>("Valor") descending
                            select order;
                }
                else
                {
                    query = from order in dt_ReciboArrendamiento.AsEnumerable()
                            orderby order.Field<Double>("Valor") ascending
                            select order;
                }

                return query.AsDataView().Table;
            }
            //Tickets no Facturados
            else //if(TipoVenta == 6)
            {
                DataTable dt_Tickets = Get_Report_GraficaMaster_Tickets(CriterioGrupo, Valor, Id_Articulo, Id_Almacen, Id_Grupo, Id_Subgrupo, Id_Linea, Id_Talla, Id_Color, Id_Colaborador, Id_GrupoClientes, Id_Cliente, Anio, M01, M02, M03, M04, M05, M06, M07, M08, M09, M10, M11, M12);

                for (int i = 0; i < dt_Tickets.Rows.Count; i++)
                {
                    if (String.IsNullOrEmpty(dt_Tickets.Rows[i]["Valor"].ToString()))
                        dt_Tickets.Rows[i]["Valor"] = "0";
                }

                EnumerableRowCollection<DataRow> query;
                if (Top.Equals("Top"))
                {
                    query = from order in dt_Tickets.AsEnumerable()
                            orderby order.Field<Double>("Valor") descending
                            select order;
                }
                else
                {
                    query = from order in dt_Tickets.AsEnumerable()
                            orderby order.Field<Double>("Valor") ascending
                            select order;
                }

                return query.AsDataView().Table;
            }
        }

        public DataTable Get_Report_GraficaMaster_Tickets(int CriterioGrupo, int Valor, int Id_Articulo, int Id_Almacen, int Id_Grupo, int Id_Subgrupo, int Id_Linea, int Id_Talla, int Id_Color, int Id_Colaborador, int Id_GrupoClientes, int Id_Cliente, int Anio, int M01, int M02, int M03, int M04, int M05, int M06, int M07, int M08, int M09, int M10, int M11, int M12)
        {
            string Query = @"

                Select 	

		            Switch(
			            @CriterioGrupo = 2, 'Público en General',
			            @CriterioGrupo = 3, 'Público en General',
			            @CriterioGrupo = 4, YEAR(a.Fecha_Ticket),
			            @CriterioGrupo = 5, Switch( MONTH(a.Fecha_Ticket) < 10, '0' + Cstr(MONTH(a.Fecha_Ticket)), true, Cstr(MONTH(a.Fecha_Ticket))),
			            @CriterioGrupo = 6, m.Descripcion,
			            @CriterioGrupo = 7, 'Tickets de Punto de Venta',
			            @CriterioGrupo = 9, e.NombreTicket,
			            @CriterioGrupo = 10, Switch( e.Marca IS NULL, 'Sin Marca', true, e.Marca ) ,
			            @CriterioGrupo = 11, f.Nombre,
			            @CriterioGrupo = 12, i.Nombre,
			            @CriterioGrupo = 13, j.Nombre,
			            @CriterioGrupo = 14, g.Nombre,
			            @CriterioGrupo = 15, h.Nombre
		            ) AS Grupo, 	
		
		            SUM ( 
			            Switch(	
				            @Valor = 1, b.Precio_Total * k.TipoCambio,
				            @Valor = 2, b.Precio_Total,
				            @Valor = 3, b.Cantidad,
				            @Valor = 4, b.Cantidad * e.Costo_Std,
				            @Valor = 5, 
				
					            Switch(
		                            Costo_Pref = '1', 	b.Cantidad * 	 Costo_Std,
		                            Costo_Pref = '2', 	b.Cantidad * 	 Costo_Promedio,
		                            Costo_Pref = '3', 	b.Cantidad * 	 Costo_Ultimo
                                )  
				            ,
				            @Valor = 6, b.Cantidad * e.Costo_Promedio,
				            @Valor = 7, b.Cantidad * e.Costo_Ultimo,
				            @Valor = 8, 

					            Switch(
		                            Costo_Pref = '1', 	b.SubTotal - b.Cantidad *  Costo_Std,
		                            Costo_Pref = '2', 	b.SubTotal - b.Cantidad *  Costo_Promedio,
		                            Costo_Pref = '3', 	b.SubTotal - b.Cantidad *  Costo_Ultimo
                                ) 
			            )
		            ) AS Valor

		            From 

			             (((((((((((dbo_Trans_Ticket_Cab AS a 
			            LEFT OUTER JOIN dbo_Trans_Ticket_Linea AS b ON a.Id_Ticket = b.Id_Ticket)
			            LEFT OUTER JOIN dbo_Cat_Articulo AS e ON b.Id_Articulo = e.Id_Articulo )
			            LEFT OUTER JOIN dbo_Cat_Grupo_Productos AS f ON e.Id_GrupoProductos = f.Id_GrupoProductos )
			            LEFT OUTER JOIN dbo_Cat_Color AS g ON e.Id_Color = g.Id_Color )
			            LEFT OUTER JOIN dbo_Cat_Talla AS h ON e.Id_Talla = h.Id_Talla )
			            LEFT OUTER JOIN dbo_Cat_Subgrupo_Productos AS i ON e.Id_SubgrupoProductos = i.Id_SubgrupoProductos 		)
			            LEFT OUTER JOIN dbo_Cat_Linea AS j ON e.Id_Linea = j.Id_Linea )
			            INNER JOIN dbo_Cat_TipoCambio AS k ON k.Id_Moneda = a.Id_Moneda 	)			            
			            INNER JOIN dbo_Cat_Almacen AS m ON a.Id_Almacen = m.Id_Almacen )
			            LEFT OUTER JOIN dbo_Cat_UM AS n ON e.Id_UM = n.Id_UM )
			            INNER JOIN dbo_Cat_Moneda AS o ON o.Id_Moneda = a.Id_Moneda )

		            WHERE  
			            a.Is_Facturado = 0 and
			            a.RFC = '@RFC' and
			            (@Id_Almacen = -1 or @Id_Almacen = m.Id_Almacen) and
			            (@Id_Articulo = -1 or @Id_Articulo = e.Id_Articulo) and			            
			            (@Id_Grupo = -1 or @Id_Grupo = f.Id_GrupoProductos) and
			            (@Id_Subgrupo = -1 or @Id_Subgrupo = i.Id_SubgrupoProductos) and
			            (@Id_Linea = -1 or @Id_Linea = j.Id_Linea) and
			            (@Id_Talla = -1 or @Id_Talla = h.Id_Talla) and
			            (@Id_Color = -1 or @Id_Color = g.Id_Color) and
			            (@Anio = -1 or @Anio = Cstr(Year(a.Fecha_Ticket))) and
			            (MONTH(a.Fecha_Ticket) in (@M01, @M02, @M03, @M04, @M05, @M06, @M07, @M08, @M09, @M10, @M11, @M12))

			        Group by
				        Switch(
					        @CriterioGrupo = 2, 'Público en General',
			                @CriterioGrupo = 3, 'Público en General',
			                @CriterioGrupo = 4, YEAR(a.Fecha_Ticket),
			                @CriterioGrupo = 5, Switch( MONTH(a.Fecha_Ticket) < 10, '0' + Cstr(MONTH(a.Fecha_Ticket)), true, Cstr(MONTH(a.Fecha_Ticket))),
			                @CriterioGrupo = 6, m.Descripcion,
			                @CriterioGrupo = 7, 'Tickets de Punto de Venta',
			                @CriterioGrupo = 9, e.NombreTicket,
			                @CriterioGrupo = 10, Switch( e.Marca IS NULL, 'Sin Marca', true, e.Marca ) ,
			                @CriterioGrupo = 11, f.Nombre,
			                @CriterioGrupo = 12, i.Nombre,
			                @CriterioGrupo = 13, j.Nombre,
			                @CriterioGrupo = 14, g.Nombre,
			                @CriterioGrupo = 15, h.Nombre
				        )	

			        	
            ";

            Query = Query.Replace("@RFC", this._RFC);
            Query = Query.Replace("@CriterioGrupo", CriterioGrupo.ToString());
            Query = Query.Replace("@Valor", Valor.ToString());
            Query = Query.Replace("@Id_Articulo", Id_Articulo.ToString());
            Query = Query.Replace("@Id_Almacen", Id_Almacen.ToString());
            Query = Query.Replace("@Id_Subgrupo", Id_Subgrupo.ToString());
            Query = Query.Replace("@Id_Linea", Id_Linea.ToString());
            Query = Query.Replace("@Id_Talla", Id_Talla.ToString());
            Query = Query.Replace("@Id_Color", Id_Color.ToString());
            Query = Query.Replace("@M01", M01.ToString());
            Query = Query.Replace("@M02", M02.ToString());
            Query = Query.Replace("@M03", M03.ToString());
            Query = Query.Replace("@M04", M04.ToString());
            Query = Query.Replace("@M05", M05.ToString());
            Query = Query.Replace("@M06", M06.ToString());
            Query = Query.Replace("@M07", M07.ToString());
            Query = Query.Replace("@M08", M08.ToString());
            Query = Query.Replace("@M09", M09.ToString());
            Query = Query.Replace("@M10", M10.ToString());
            Query = Query.Replace("@M11", M11.ToString());
            Query = Query.Replace("@M12", M12.ToString());
            Query = Query.Replace("@Id_Colaborador", Id_Colaborador.ToString());
            Query = Query.Replace("@Id_GrupoClientes", Id_GrupoClientes.ToString());
            Query = Query.Replace("@Id_Grupo", Id_Grupo.ToString());
            Query = Query.Replace("@Id_Cliente", Id_Cliente.ToString());
            Query = Query.Replace("@Anio", Anio.ToString());

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Report_GraficaMaster_Factura(int CriterioGrupo, int Valor, int Id_Articulo, int Id_Almacen, int Id_Grupo, int Id_Subgrupo, int Id_Linea, int Id_Talla, int Id_Color, int Id_Colaborador, int Id_GrupoClientes, int Id_Cliente, int Anio, int M01, int M02, int M03, int M04, int M05, int M06, int M07, int M08, int M09, int M10, int M11, int M12)
        {
            string Query = @"

                Select 	

		            Switch(
			            @CriterioGrupo = 2, c.Nombre_Comercial,
			            @CriterioGrupo = 3, d.Nombre,
			            @CriterioGrupo = 4, YEAR(a.Fecha_Documento),
			            @CriterioGrupo = 5, Switch( MONTH(a.Fecha_Documento) < 10, '0' + Cstr(MONTH(a.Fecha_Documento)), true, Cstr(MONTH(a.Fecha_Documento))),
			            @CriterioGrupo = 6, m.Descripcion,
			            @CriterioGrupo = 7, l.Nombre,
			            @CriterioGrupo = 9, e.NombreTicket,
			            @CriterioGrupo = 10, Switch( e.Marca IS NULL, 'Sin Marca', true, e.Marca ) ,
			            @CriterioGrupo = 11, f.Nombre,
			            @CriterioGrupo = 12, i.Nombre,
			            @CriterioGrupo = 13, j.Nombre,
			            @CriterioGrupo = 14, g.Nombre,
			            @CriterioGrupo = 15, h.Nombre
		            ) AS Grupo, 	
		
		            SUM ( 
			            Switch(	
				            @Valor = 1, b.Precio_Total * k.TipoCambio,
				            @Valor = 2, b.Precio_Total,
				            @Valor = 3, b.Cantidad,
				            @Valor = 4, b.Cantidad * e.Costo_Std,
				            @Valor = 5, 
				
					            Switch(
		                            Costo_Pref = '1', 	b.Cantidad * 	 Costo_Std,
		                            Costo_Pref = '2', 	b.Cantidad * 	 Costo_Promedio,
		                            Costo_Pref = '3', 	b.Cantidad * 	 Costo_Ultimo
                                )  
				            ,
				            @Valor = 6, b.Cantidad * e.Costo_Promedio,
				            @Valor = 7, b.Cantidad * e.Costo_Ultimo,
				            @Valor = 8, 

					            Switch(
		                            Costo_Pref = '1', 	b.Precio_SubTotal - b.Cantidad *  Costo_Std,
		                            Costo_Pref = '2', 	b.Precio_SubTotal - b.Cantidad *  Costo_Promedio,
		                            Costo_Pref = '3', 	b.Precio_SubTotal - b.Cantidad *  Costo_Ultimo
                                ) 
			            )
		            ) AS Valor

		            From 

			             ((((((((((((((((dbo_Trans_Factura_Cliente_Cab AS a 
			            LEFT OUTER JOIN dbo_Trans_Factura_Cliente_Linea AS b ON a.Id_Factura_Cliente = b.Id_Padre)
			            INNER JOIN dbo_Cat_Cliente AS c ON a.Id_Cliente = c.Id_Cliente )
			            INNER JOIN dbo_Cat_Grupo_Clientes AS d ON c.Id_GrupoClientes = d.Id_GrupoClientes )
			            LEFT OUTER JOIN dbo_Cat_Articulo AS e ON b.Id_Articulo = e.Id_Articulo )
			            LEFT OUTER JOIN dbo_Cat_Grupo_Productos AS f ON e.Id_GrupoProductos = f.Id_GrupoProductos )
			            LEFT OUTER JOIN dbo_Cat_Color AS g ON e.Id_Color = g.Id_Color )
			            LEFT OUTER JOIN dbo_Cat_Talla AS h ON e.Id_Talla = h.Id_Talla )
			            LEFT OUTER JOIN dbo_Cat_Subgrupo_Productos AS i ON e.Id_SubgrupoProductos = i.Id_SubgrupoProductos 		)
			            LEFT OUTER JOIN dbo_Cat_Linea AS j ON e.Id_Linea = j.Id_Linea )
			            INNER JOIN dbo_Cat_TipoCambio AS k ON k.Id_Moneda = a.Id_Moneda 	)
			            INNER JOIN dbo_Cat_Colaborador AS l ON a.Id_Colaborador = l.Id_Colaborador )
			            INNER JOIN dbo_Cat_Almacen AS m ON a.Id_Almacen = m.Id_Almacen )
			            LEFT OUTER JOIN dbo_Cat_UM AS n ON e.Id_UM = n.Id_UM )
			            INNER JOIN dbo_Cat_Moneda AS o ON o.Id_Moneda = a.Id_Moneda )
			            INNER JOIN dbo_Cat_Estatus ON a.Estatus = dbo_Cat_Estatus.Estatus )
			            LEFT OUTER JOIN dbo_Cat_Campana ON a.Id_Campana = dbo_Cat_Campana.Id_Campana )

		            WHERE  
			            a.Estatus = 410 and
			            a.RFC = '@RFC' and
			            (@Id_Almacen = -1 or @Id_Almacen = m.Id_Almacen) and
			            (@Id_Articulo = -1 or @Id_Articulo = e.Id_Articulo) and
			            (@Id_Colaborador = -1 or @Id_Colaborador = l.Id_Colaborador) and
			            (@Id_GrupoClientes = -1 or @Id_GrupoClientes = d.Id_GrupoClientes) and
			            (@Id_Cliente = -1 or @Id_Cliente = a.Id_Cliente) and			
			            (@Id_Grupo = -1 or @Id_Grupo = f.Id_GrupoProductos) and
			            (@Id_Subgrupo = -1 or @Id_Subgrupo = i.Id_SubgrupoProductos) and
			            (@Id_Linea = -1 or @Id_Linea = j.Id_Linea) and
			            (@Id_Talla = -1 or @Id_Talla = h.Id_Talla) and
			            (@Id_Color = -1 or @Id_Color = g.Id_Color) and
			            (@Anio = -1 or @Anio = Cstr(Year(a.Fecha_Documento))) and
			            (MONTH(a.Fecha_Documento) in (@M01, @M02, @M03, @M04, @M05, @M06, @M07, @M08, @M09, @M10, @M11, @M12))

			        Group by
				        Switch(
					        @CriterioGrupo = 2, c.Nombre_Comercial,
					        @CriterioGrupo = 3, d.Nombre,
					        @CriterioGrupo = 4, YEAR(a.Fecha_Documento),
					        @CriterioGrupo = 5, Switch( MONTH(a.Fecha_Documento) < 10, '0' + Cstr(MONTH(a.Fecha_Documento)), true, Cstr(MONTH(a.Fecha_Documento))),
					        @CriterioGrupo = 6, m.Descripcion,
					        @CriterioGrupo = 7, l.Nombre,
					        @CriterioGrupo = 9, e.NombreTicket,
					        @CriterioGrupo = 10, Switch( e.Marca IS NULL, 'Sin Marca', true, e.Marca ),
					        @CriterioGrupo = 11, f.Nombre,
					        @CriterioGrupo = 12, i.Nombre,
					        @CriterioGrupo = 13, j.Nombre,
					        @CriterioGrupo = 14, g.Nombre,
					        @CriterioGrupo = 15, h.Nombre
				        )	

			        	
            ";

            Query = Query.Replace("@RFC", this._RFC);
            Query = Query.Replace("@CriterioGrupo", CriterioGrupo.ToString());
            Query = Query.Replace("@Valor", Valor.ToString());
            Query = Query.Replace("@Id_Articulo", Id_Articulo.ToString());
            Query = Query.Replace("@Id_Almacen", Id_Almacen.ToString());
            Query = Query.Replace("@Id_Subgrupo", Id_Subgrupo.ToString());
            Query = Query.Replace("@Id_Linea", Id_Linea.ToString());
            Query = Query.Replace("@Id_Talla", Id_Talla.ToString());
            Query = Query.Replace("@Id_Color", Id_Color.ToString());
            Query = Query.Replace("@M01", M01.ToString());
            Query = Query.Replace("@M02", M02.ToString());
            Query = Query.Replace("@M03", M03.ToString());
            Query = Query.Replace("@M04", M04.ToString());
            Query = Query.Replace("@M05", M05.ToString());
            Query = Query.Replace("@M06", M06.ToString());
            Query = Query.Replace("@M07", M07.ToString());
            Query = Query.Replace("@M08", M08.ToString());
            Query = Query.Replace("@M09", M09.ToString());
            Query = Query.Replace("@M10", M10.ToString());
            Query = Query.Replace("@M11", M11.ToString());
            Query = Query.Replace("@M12", M12.ToString());
            Query = Query.Replace("@Id_Colaborador", Id_Colaborador.ToString());
            Query = Query.Replace("@Id_GrupoClientes", Id_GrupoClientes.ToString());
            Query = Query.Replace("@Id_Grupo", Id_Grupo.ToString());
            Query = Query.Replace("@Id_Cliente", Id_Cliente.ToString());
            Query = Query.Replace("@Anio", Anio.ToString());

            return SrvDB.ExecuteQuery_Get(Query);
        }
        
        public DataTable Get_Report_GraficaMaster_Remision(int CriterioGrupo, int Valor, int Id_Articulo, int Id_Almacen, int Id_Grupo, int Id_Subgrupo, int Id_Linea, int Id_Talla, int Id_Color, int Id_Colaborador, int Id_GrupoClientes, int Id_Cliente, int Anio, int M01, int M02, int M03, int M04, int M05, int M06, int M07, int M08, int M09, int M10, int M11, int M12)
        {
            string Query = @"

                Select 	

		            Switch(
			            @CriterioGrupo = 2, c.Nombre_Comercial,
			            @CriterioGrupo = 3, d.Nombre,
			            @CriterioGrupo = 4, YEAR(a.Fecha_Documento),
			            @CriterioGrupo = 5, Switch( MONTH(a.Fecha_Documento) < 10, '0' + Cstr(MONTH(a.Fecha_Documento)), true, Cstr(MONTH(a.Fecha_Documento))),
			            @CriterioGrupo = 6, m.Descripcion,
			            @CriterioGrupo = 7, l.Nombre,
			            @CriterioGrupo = 9, e.NombreTicket,
			            @CriterioGrupo = 10, Switch( e.Marca IS NULL, 'Sin Marca', true, e.Marca ) ,
			            @CriterioGrupo = 11, f.Nombre,
			            @CriterioGrupo = 12, i.Nombre,
			            @CriterioGrupo = 13, j.Nombre,
			            @CriterioGrupo = 14, g.Nombre,
			            @CriterioGrupo = 15, h.Nombre
		            ) AS Grupo, 	
		
		            SUM ( 
			            Switch(	
				            @Valor = 1, b.Precio_Total * k.TipoCambio,
				            @Valor = 2, b.Precio_Total,
				            @Valor = 3, b.Cantidad,
				            @Valor = 4, b.Cantidad * e.Costo_Std,
				            @Valor = 5, 
				
					            Switch(
		                            Costo_Pref = '1', 	b.Cantidad * 	 Costo_Std,
		                            Costo_Pref = '2', 	b.Cantidad * 	 Costo_Promedio,
		                            Costo_Pref = '3', 	b.Cantidad * 	 Costo_Ultimo
                                )  
				            ,
				            @Valor = 6, b.Cantidad * e.Costo_Promedio,
				            @Valor = 7, b.Cantidad * e.Costo_Ultimo,
				            @Valor = 8, 

					            Switch(
		                            Costo_Pref = '1', 	b.Precio_SubTotal - b.Cantidad *  Costo_Std,
		                            Costo_Pref = '2', 	b.Precio_SubTotal - b.Cantidad *  Costo_Promedio,
		                            Costo_Pref = '3', 	b.Precio_SubTotal - b.Cantidad *  Costo_Ultimo
                                ) 
			            )
		            ) AS Valor

		            From 

			             ((((((((((((((((dbo_Trans_Remision_Cab AS a 
			            LEFT OUTER JOIN dbo_Trans_Remision_Linea AS b ON a.Id_Remision = b.Id_Padre)
			            INNER JOIN dbo_Cat_Cliente AS c ON a.Id_Cliente = c.Id_Cliente )
			            INNER JOIN dbo_Cat_Grupo_Clientes AS d ON c.Id_GrupoClientes = d.Id_GrupoClientes )
			            LEFT OUTER JOIN dbo_Cat_Articulo AS e ON b.Id_Articulo = e.Id_Articulo )
			            LEFT OUTER JOIN dbo_Cat_Grupo_Productos AS f ON e.Id_GrupoProductos = f.Id_GrupoProductos )
			            LEFT OUTER JOIN dbo_Cat_Color AS g ON e.Id_Color = g.Id_Color )
			            LEFT OUTER JOIN dbo_Cat_Talla AS h ON e.Id_Talla = h.Id_Talla )
			            LEFT OUTER JOIN dbo_Cat_Subgrupo_Productos AS i ON e.Id_SubgrupoProductos = i.Id_SubgrupoProductos 		)
			            LEFT OUTER JOIN dbo_Cat_Linea AS j ON e.Id_Linea = j.Id_Linea )
			            INNER JOIN dbo_Cat_TipoCambio AS k ON k.Id_Moneda = a.Id_Moneda 	)
			            INNER JOIN dbo_Cat_Colaborador AS l ON a.Id_Colaborador = l.Id_Colaborador )
			            INNER JOIN dbo_Cat_Almacen AS m ON a.Id_Almacen = m.Id_Almacen )
			            LEFT OUTER JOIN dbo_Cat_UM AS n ON e.Id_UM = n.Id_UM )
			            INNER JOIN dbo_Cat_Moneda AS o ON o.Id_Moneda = a.Id_Moneda )
			            INNER JOIN dbo_Cat_Estatus ON a.Estatus = dbo_Cat_Estatus.Estatus )
			            LEFT OUTER JOIN dbo_Cat_Campana ON a.Id_Campana = dbo_Cat_Campana.Id_Campana )

		            WHERE  
			            a.Estatus = 410 and
			            a.RFC = '@RFC' and
			            (@Id_Almacen = -1 or @Id_Almacen = m.Id_Almacen) and
			            (@Id_Articulo = -1 or @Id_Articulo = e.Id_Articulo) and
			            (@Id_Colaborador = -1 or @Id_Colaborador = l.Id_Colaborador) and
			            (@Id_GrupoClientes = -1 or @Id_GrupoClientes = d.Id_GrupoClientes) and
			            (@Id_Cliente = -1 or @Id_Cliente = a.Id_Cliente) and			
			            (@Id_Grupo = -1 or @Id_Grupo = f.Id_GrupoProductos) and
			            (@Id_Subgrupo = -1 or @Id_Subgrupo = i.Id_SubgrupoProductos) and
			            (@Id_Linea = -1 or @Id_Linea = j.Id_Linea) and
			            (@Id_Talla = -1 or @Id_Talla = h.Id_Talla) and
			            (@Id_Color = -1 or @Id_Color = g.Id_Color) and
			            (@Anio = -1 or @Anio = Cstr(Year(a.Fecha_Documento))) and
			            (MONTH(a.Fecha_Documento) in (@M01, @M02, @M03, @M04, @M05, @M06, @M07, @M08, @M09, @M10, @M11, @M12))

			        Group by
				        Switch(
					        @CriterioGrupo = 2, c.Nombre_Comercial,
					        @CriterioGrupo = 3, d.Nombre,
					        @CriterioGrupo = 4, YEAR(a.Fecha_Documento),
					        @CriterioGrupo = 5, Switch( MONTH(a.Fecha_Documento) < 10, '0' + Cstr(MONTH(a.Fecha_Documento)), true, Cstr(MONTH(a.Fecha_Documento))),
					        @CriterioGrupo = 6, m.Descripcion,
					        @CriterioGrupo = 7, l.Nombre,
					        @CriterioGrupo = 9, e.NombreTicket,
					        @CriterioGrupo = 10, Switch( e.Marca IS NULL, 'Sin Marca', true, e.Marca ),
					        @CriterioGrupo = 11, f.Nombre,
					        @CriterioGrupo = 12, i.Nombre,
					        @CriterioGrupo = 13, j.Nombre,
					        @CriterioGrupo = 14, g.Nombre,
					        @CriterioGrupo = 15, h.Nombre
				        )	

			        	
            ";

            Query = Query.Replace("@RFC", this._RFC);
            Query = Query.Replace("@CriterioGrupo", CriterioGrupo.ToString());
            Query = Query.Replace("@Valor", Valor.ToString());
            Query = Query.Replace("@Id_Articulo", Id_Articulo.ToString());
            Query = Query.Replace("@Id_Almacen", Id_Almacen.ToString());
            Query = Query.Replace("@Id_Subgrupo", Id_Subgrupo.ToString());
            Query = Query.Replace("@Id_Linea", Id_Linea.ToString());
            Query = Query.Replace("@Id_Talla", Id_Talla.ToString());
            Query = Query.Replace("@Id_Color", Id_Color.ToString());
            Query = Query.Replace("@M01", M01.ToString());
            Query = Query.Replace("@M02", M02.ToString());
            Query = Query.Replace("@M03", M03.ToString());
            Query = Query.Replace("@M04", M04.ToString());
            Query = Query.Replace("@M05", M05.ToString());
            Query = Query.Replace("@M06", M06.ToString());
            Query = Query.Replace("@M07", M07.ToString());
            Query = Query.Replace("@M08", M08.ToString());
            Query = Query.Replace("@M09", M09.ToString());
            Query = Query.Replace("@M10", M10.ToString());
            Query = Query.Replace("@M11", M11.ToString());
            Query = Query.Replace("@M12", M12.ToString());
            Query = Query.Replace("@Id_Colaborador", Id_Colaborador.ToString());
            Query = Query.Replace("@Id_GrupoClientes", Id_GrupoClientes.ToString());
            Query = Query.Replace("@Id_Grupo", Id_Grupo.ToString());
            Query = Query.Replace("@Id_Cliente", Id_Cliente.ToString());
            Query = Query.Replace("@Anio", Anio.ToString());

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Report_GraficaMaster_ReciboHonorarios(int CriterioGrupo, int Valor, int Id_Articulo, int Id_Almacen, int Id_Grupo, int Id_Subgrupo, int Id_Linea, int Id_Talla, int Id_Color, int Id_Colaborador, int Id_GrupoClientes, int Id_Cliente, int Anio, int M01, int M02, int M03, int M04, int M05, int M06, int M07, int M08, int M09, int M10, int M11, int M12)
        {
            string Query = @"

                Select 	

		            Switch(
			            @CriterioGrupo = 2, c.Nombre_Comercial,
			            @CriterioGrupo = 3, d.Nombre,
			            @CriterioGrupo = 4, YEAR(a.Fecha_Documento),
			            @CriterioGrupo = 5, Switch( MONTH(a.Fecha_Documento) < 10, '0' + Cstr(MONTH(a.Fecha_Documento)), true, Cstr(MONTH(a.Fecha_Documento))),
			            @CriterioGrupo = 6, '',
			            @CriterioGrupo = 7, '',
			            @CriterioGrupo = 9, e.NombreTicket,
			            @CriterioGrupo = 10, Switch( e.Marca IS NULL, 'Sin Marca', true, e.Marca ) ,
			            @CriterioGrupo = 11, f.Nombre,
			            @CriterioGrupo = 12, i.Nombre,
			            @CriterioGrupo = 13, j.Nombre,
			            @CriterioGrupo = 14, g.Nombre,
			            @CriterioGrupo = 15, h.Nombre
		            ) AS Grupo, 	
		
		            SUM ( 
			            Switch(	
				            @Valor = 1, b.Precio_Total * k.TipoCambio,
				            @Valor = 2, b.Precio_Total,
				            @Valor = 3, b.Cantidad,
				            @Valor = 4, b.Cantidad * e.Costo_Std,
				            @Valor = 5, 
				
					            Switch(
		                            Costo_Pref = '1', 	b.Cantidad * 	 Costo_Std,
		                            Costo_Pref = '2', 	b.Cantidad * 	 Costo_Promedio,
		                            Costo_Pref = '3', 	b.Cantidad * 	 Costo_Ultimo
                                )  
				            ,
				            @Valor = 6, b.Cantidad * e.Costo_Promedio,
				            @Valor = 7, b.Cantidad * e.Costo_Ultimo,
				            @Valor = 8, 

					            Switch(
		                            Costo_Pref = '1', 	b.Precio_SubTotal - b.Cantidad *  Costo_Std,
		                            Costo_Pref = '2', 	b.Precio_SubTotal - b.Cantidad *  Costo_Promedio,
		                            Costo_Pref = '3', 	b.Precio_SubTotal - b.Cantidad *  Costo_Ultimo
                                ) 
			            )
		            ) AS Valor

		            From 

			            ((((((((((((((dbo_Trans_ReciboHonorarios_Cliente_Cab AS a 
			            LEFT OUTER JOIN dbo_Trans_ReciboHonorarios_Cliente_Linea AS b ON a.Id_ReciboHonorarios_Cliente = b.Id_Padre)
			            INNER JOIN dbo_Cat_Cliente AS c ON a.Id_Cliente = c.Id_Cliente )
			            INNER JOIN dbo_Cat_Grupo_Clientes AS d ON c.Id_GrupoClientes = d.Id_GrupoClientes )
			            LEFT OUTER JOIN dbo_Cat_Articulo AS e ON b.Id_Articulo = e.Id_Articulo )
			            LEFT OUTER JOIN dbo_Cat_Grupo_Productos AS f ON e.Id_GrupoProductos = f.Id_GrupoProductos )
			            LEFT OUTER JOIN dbo_Cat_Color AS g ON e.Id_Color = g.Id_Color )
			            LEFT OUTER JOIN dbo_Cat_Talla AS h ON e.Id_Talla = h.Id_Talla )
			            LEFT OUTER JOIN dbo_Cat_Subgrupo_Productos AS i ON e.Id_SubgrupoProductos = i.Id_SubgrupoProductos 		)
			            LEFT OUTER JOIN dbo_Cat_Linea AS j ON e.Id_Linea = j.Id_Linea )
			            INNER JOIN dbo_Cat_TipoCambio AS k ON k.Id_Moneda = a.Id_Moneda 	)			            
			            LEFT OUTER JOIN dbo_Cat_UM AS n ON e.Id_UM = n.Id_UM )
			            INNER JOIN dbo_Cat_Moneda AS o ON o.Id_Moneda = a.Id_Moneda )
			            INNER JOIN dbo_Cat_Estatus ON a.Estatus = dbo_Cat_Estatus.Estatus )
			            LEFT OUTER JOIN dbo_Cat_Campana ON a.Id_Campana = dbo_Cat_Campana.Id_Campana )

		            WHERE  
			            a.Estatus = 410 and
			            a.RFC = '@RFC' and			            
			            (@Id_Articulo = -1 or @Id_Articulo = e.Id_Articulo) and			            
			            (@Id_GrupoClientes = -1 or @Id_GrupoClientes = d.Id_GrupoClientes) and
			            (@Id_Cliente = -1 or @Id_Cliente = a.Id_Cliente) and			
			            (@Id_Grupo = -1 or @Id_Grupo = f.Id_GrupoProductos) and
			            (@Id_Subgrupo = -1 or @Id_Subgrupo = i.Id_SubgrupoProductos) and
			            (@Id_Linea = -1 or @Id_Linea = j.Id_Linea) and
			            (@Id_Talla = -1 or @Id_Talla = h.Id_Talla) and
			            (@Id_Color = -1 or @Id_Color = g.Id_Color) and
			            (@Anio = -1 or @Anio = Cstr(Year(a.Fecha_Documento))) and
			            (MONTH(a.Fecha_Documento) in (@M01, @M02, @M03, @M04, @M05, @M06, @M07, @M08, @M09, @M10, @M11, @M12))

			        Group by
				        Switch(
					        @CriterioGrupo = 2, c.Nombre_Comercial,
					        @CriterioGrupo = 3, d.Nombre,
					        @CriterioGrupo = 4, YEAR(a.Fecha_Documento),
					        @CriterioGrupo = 5, Switch( MONTH(a.Fecha_Documento) < 10, '0' + Cstr(MONTH(a.Fecha_Documento)), true, Cstr(MONTH(a.Fecha_Documento))),
					        @CriterioGrupo = 6, '',
					        @CriterioGrupo = 7, '',
					        @CriterioGrupo = 9, e.NombreTicket,
					        @CriterioGrupo = 10, Switch( e.Marca IS NULL, 'Sin Marca', true, e.Marca ),
					        @CriterioGrupo = 11, f.Nombre,
					        @CriterioGrupo = 12, i.Nombre,
					        @CriterioGrupo = 13, j.Nombre,
					        @CriterioGrupo = 14, g.Nombre,
					        @CriterioGrupo = 15, h.Nombre
				        )	

			        	
            ";

            Query = Query.Replace("@RFC", this._RFC);
            Query = Query.Replace("@CriterioGrupo", CriterioGrupo.ToString());
            Query = Query.Replace("@Valor", Valor.ToString());
            Query = Query.Replace("@Id_Articulo", Id_Articulo.ToString());
            Query = Query.Replace("@Id_Almacen", Id_Almacen.ToString());
            Query = Query.Replace("@Id_Subgrupo", Id_Subgrupo.ToString());
            Query = Query.Replace("@Id_Linea", Id_Linea.ToString());
            Query = Query.Replace("@Id_Talla", Id_Talla.ToString());
            Query = Query.Replace("@Id_Color", Id_Color.ToString());
            Query = Query.Replace("@M01", M01.ToString());
            Query = Query.Replace("@M02", M02.ToString());
            Query = Query.Replace("@M03", M03.ToString());
            Query = Query.Replace("@M04", M04.ToString());
            Query = Query.Replace("@M05", M05.ToString());
            Query = Query.Replace("@M06", M06.ToString());
            Query = Query.Replace("@M07", M07.ToString());
            Query = Query.Replace("@M08", M08.ToString());
            Query = Query.Replace("@M09", M09.ToString());
            Query = Query.Replace("@M10", M10.ToString());
            Query = Query.Replace("@M11", M11.ToString());
            Query = Query.Replace("@M12", M12.ToString());
            Query = Query.Replace("@Id_Colaborador", Id_Colaborador.ToString());
            Query = Query.Replace("@Id_GrupoClientes", Id_GrupoClientes.ToString());
            Query = Query.Replace("@Id_Grupo", Id_Grupo.ToString());
            Query = Query.Replace("@Id_Cliente", Id_Cliente.ToString());
            Query = Query.Replace("@Anio", Anio.ToString());

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Report_GraficaMaster_ReciboArrendamiento(int CriterioGrupo, int Valor, int Id_Articulo, int Id_Almacen, int Id_Grupo, int Id_Subgrupo, int Id_Linea, int Id_Talla, int Id_Color, int Id_Colaborador, int Id_GrupoClientes, int Id_Cliente, int Anio, int M01, int M02, int M03, int M04, int M05, int M06, int M07, int M08, int M09, int M10, int M11, int M12)
        {
            string Query = @"

                Select 	

		            Switch(
			            @CriterioGrupo = 2, c.Nombre_Comercial,
			            @CriterioGrupo = 3, d.Nombre,
			            @CriterioGrupo = 4, YEAR(a.Fecha_Documento),
			            @CriterioGrupo = 5, Switch( MONTH(a.Fecha_Documento) < 10, '0' + Cstr(MONTH(a.Fecha_Documento)), true, Cstr(MONTH(a.Fecha_Documento))),
			            @CriterioGrupo = 6, '',
			            @CriterioGrupo = 7, l.Nombre,
			            @CriterioGrupo = 9, '',
			            @CriterioGrupo = 10, 'Sin Marca',
			            @CriterioGrupo = 11, '',
			            @CriterioGrupo = 12, '',
			            @CriterioGrupo = 13, '',
			            @CriterioGrupo = 14, '',
			            @CriterioGrupo = 15, ''
		            ) AS Grupo, 	
		
		            SUM ( 
			            Switch(	
				            @Valor = 1, b.Precio_Total * k.TipoCambio,
				            @Valor = 2, b.Precio_Total,
				            @Valor = 3, b.Cantidad,
				            @Valor = 4, b.Cantidad * 0,
				            @Valor = 5, 0,
				            @Valor = 6, b.Cantidad * 0,
				            @Valor = 7, b.Cantidad * 0,
				            @Valor = 8, 0
			            )
		            ) AS Valor

		            From 

			             (((((((((dbo_Trans_ReciboArrendamiento_Cliente_Cab AS a 
			            LEFT OUTER JOIN dbo_Trans_ReciboArrendamiento_Cliente_Linea AS b ON a.Id_ReciboArrendamiento_Cliente = b.Id_Padre)
			            INNER JOIN dbo_Cat_Cliente AS c ON a.Id_Cliente = c.Id_Cliente )
			            INNER JOIN dbo_Cat_Grupo_Clientes AS d ON c.Id_GrupoClientes = d.Id_GrupoClientes )
			            LEFT OUTER JOIN dbo_Cat_Inmueble AS e ON b.Id_Articulo = e.Id_Inmueble )			            
			            INNER JOIN dbo_Cat_TipoCambio AS k ON k.Id_Moneda = a.Id_Moneda 	)
			            INNER JOIN dbo_Cat_Colaborador AS l ON a.Id_Colaborador = l.Id_Colaborador )			            
			            INNER JOIN dbo_Cat_Moneda AS o ON o.Id_Moneda = a.Id_Moneda )
			            INNER JOIN dbo_Cat_Estatus ON a.Estatus = dbo_Cat_Estatus.Estatus )
			            LEFT OUTER JOIN dbo_Cat_Campana ON a.Id_Campana = dbo_Cat_Campana.Id_Campana )

		            WHERE  
			            a.Estatus = 410 and
			            a.RFC = '@RFC' and			            			            
			            (@Id_GrupoClientes = -1 or @Id_GrupoClientes = d.Id_GrupoClientes) and
			            (@Id_Cliente = -1 or @Id_Cliente = a.Id_Cliente) and						            			            			            
			            (@Anio = -1 or @Anio = Cstr(Year(a.Fecha_Documento))) and
			            (MONTH(a.Fecha_Documento) in (@M01, @M02, @M03, @M04, @M05, @M06, @M07, @M08, @M09, @M10, @M11, @M12))

			        Group by
				        Switch(
					        @CriterioGrupo = 2, c.Nombre_Comercial,
					        @CriterioGrupo = 3, d.Nombre,
					        @CriterioGrupo = 4, YEAR(a.Fecha_Documento),
					        @CriterioGrupo = 5, Switch( MONTH(a.Fecha_Documento) < 10, '0' + Cstr(MONTH(a.Fecha_Documento)), true, Cstr(MONTH(a.Fecha_Documento))),
					        @CriterioGrupo = 6, '',
					        @CriterioGrupo = 7, l.Nombre,
					        @CriterioGrupo = 9, '',
					        @CriterioGrupo = 10, 'Sin Marca',
					        @CriterioGrupo = 11, '',
					        @CriterioGrupo = 12, '',
					        @CriterioGrupo = 13, '',
					        @CriterioGrupo = 14, '',
					        @CriterioGrupo = 15, ''
				        )	

			        	
            ";

            Query = Query.Replace("@RFC", this._RFC);
            Query = Query.Replace("@CriterioGrupo", CriterioGrupo.ToString());
            Query = Query.Replace("@Valor", Valor.ToString());
            Query = Query.Replace("@Id_Articulo", Id_Articulo.ToString());
            Query = Query.Replace("@Id_Almacen", Id_Almacen.ToString());
            Query = Query.Replace("@Id_Subgrupo", Id_Subgrupo.ToString());
            Query = Query.Replace("@Id_Linea", Id_Linea.ToString());
            Query = Query.Replace("@Id_Talla", Id_Talla.ToString());
            Query = Query.Replace("@Id_Color", Id_Color.ToString());
            Query = Query.Replace("@M01", M01.ToString());
            Query = Query.Replace("@M02", M02.ToString());
            Query = Query.Replace("@M03", M03.ToString());
            Query = Query.Replace("@M04", M04.ToString());
            Query = Query.Replace("@M05", M05.ToString());
            Query = Query.Replace("@M06", M06.ToString());
            Query = Query.Replace("@M07", M07.ToString());
            Query = Query.Replace("@M08", M08.ToString());
            Query = Query.Replace("@M09", M09.ToString());
            Query = Query.Replace("@M10", M10.ToString());
            Query = Query.Replace("@M11", M11.ToString());
            Query = Query.Replace("@M12", M12.ToString());
            Query = Query.Replace("@Id_Colaborador", Id_Colaborador.ToString());
            Query = Query.Replace("@Id_GrupoClientes", Id_GrupoClientes.ToString());
            Query = Query.Replace("@Id_Grupo", Id_Grupo.ToString());
            Query = Query.Replace("@Id_Cliente", Id_Cliente.ToString());
            Query = Query.Replace("@Anio", Anio.ToString());

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Report(Documentos_Id Tipo_Documento, int Id_Documento)
        {
            string Tabla = "";
            string Id = "";
            string fechas = "";
            if (Tipo_Documento == Documentos_Id.Doc_FacturaCliente)
            {
                Tabla = "dbo_Trans_Factura_Cliente";
                Id = "Id_Factura_Cliente";
                fechas = "Fecha_Factura_Cliente";
            }
            else if (Tipo_Documento == Documentos_Id.Doc_Remision)
            {
                Tabla = "dbo_Trans_Remision";
                Id = "Id_Remision";
                fechas = "Fecha_Documento";
            }
            else if (Tipo_Documento == Documentos_Id.Doc_Pedido)
            {
                Tabla = "dbo_Trans_Pedido";
                Id = "Id_Pedido";
                fechas = "Fecha_Documento";
            }
            else if (Tipo_Documento == Documentos_Id.Doc_CotizacionVenta)
            {
                Tabla = "dbo_Trans_Cotizacion_Venta";
                Id = "Id_Cotizacion_Venta";
             fechas = "Fecha_Documento";
            }
            else if (Tipo_Documento == Documentos_Id.Doc_DevolucionCliente)
            {
                Tabla = "dbo_Trans_Devolucion_Cliente";
                Id = "Id_Devolucion_Cliente";
                fechas = "Fecha_Devolucion_Cliente";
            }
            else if (Tipo_Documento == Documentos_Id.Doc_NotaCreditoCliente)
            {
                Tabla = "dbo_Trans_Nota_Credito_Cliente";
                Id = "Id_Nota_Credito_Cliente";
                 fechas = "Fecha_Nota_Credito_Cliente";
            }

            string Query = @"
                
                SELECT  

	                a.@@Id, 
	                a.Secuencia, 
	                a.RFC, 
	                a.Id_Cliente, 
	                c.RFC_Cliente, 
	                c.Razon_Social, 
	                c.Nombre_Comercial, 
	                Sucursal.Calle, 
	                Sucursal.Num_Ext, 
	                Sucursal.Num_Int, 
                    Sucursal.Colonia, 
	                Sucursal.CP, 
	                Estado_SIIE.Nombre AS Estado, 
	                Sucursal.Municipio, 
	                Pais_SIIE.Nombre AS Pais, 
                    Sucursal.Calle + ' ' + Sucursal.Num_Ext + ' ' +
                    Switch(
		                Sucursal.Num_Int   IS NULL, ', COL. ',
		                true, Sucursal.Num_Int + ', COL. '
                    )
	                + Sucursal.Colonia + ', C.P. ' + Sucursal.CP + ', ' + Sucursal.Municipio + ', ' + Estado_SIIE.Nombre AS Direccion, 

	                c.Calle AS Calle_Cliente, 
	                c.Num_Ext AS Num_Ext_Cliente,
                    c.Num_Int AS Num_Int_Cliente, 
	                c.Colonia AS Colonia_Cliente, 
	                c.CP AS CP_Cliente, 
	                Estado_Cliente.Nombre AS Estado_Cliente, 
	                c.Municipio AS Municipio_Cliente, 
	                Pais_Cliente.Nombre AS Pais_Cliente, 
	                c.Calle + ' ' + c.Num_Ext + ' ' + 
	                Switch(
		                c.Num_Int   IS NULL, ', COL. ',
		                true, c.Num_Int + ', COL. '
                    )	
	
	                + c.Colonia + ', C.P. ' + c.CP + ', ' + c.Municipio + ', ' + Estado_Cliente.Nombre AS Direccion_Cliente, 
	                d.Id_GrupoClientes, 
	                d.Nombre AS Grupo_Cliente, 
                    YEAR(a.Fecha_Documento)  AS Anio, 
	                MONTH(a.Fecha_Documento) AS Mes_Id, 
                    Cstr(YEAR(a.Fecha_Documento))  + '-' + 
      
                    Switch(
		                MONTH(a.Fecha_Documento) < 10, '0' + Cstr(MONTH(a.Fecha_Documento)),
		                true, Cstr(MONTH(a.Fecha_Documento))
                    ) AS Mes, 

	                a.Fecha_Documento as @@fecha, 
	                a.Fecha_Entrega,
	                a.Fecha_Vencimiento, 
	                m.Id_Almacen, 
	                m.Descripcion AS Almacen, 
	                l.Id_Colaborador, 
	                l.Nombre AS Colaborador, 
	                e.Id_Articulo, 
	                e.Nombre AS Articulo, 
        	        e.NombreTicket, 
	
	                Switch(
		                e.Marca IS NULL, 'Sin Marca',
		                true, e.Marca
                    ) AS Marca, 

	                f.Id_GrupoProductos, 
	                f.Nombre AS Grupo_Productos, 
	                i.Id_SubgrupoProductos, 
	                i.Nombre AS Subgrupo_Productos, 
	                j.Id_Linea, 
	                j.Nombre AS Linea, 
	                g.Id_Color,
	                g.Nombre AS Color, 
	                h.Id_Talla, 
	                h.Nombre AS Talla, 
	                b.Precio_SubTotal * k.TipoCambio AS Importe_Pesos, 
	                b.Precio_SubTotal AS Importe_Moneda_Fact, 
	                b.Cantidad, 
	                n.Nombre AS UnidadMedida, 
	                b.Cantidad * e.Costo_Std AS Costo_Std, 
	
	                Switch(
		                e.Costo_Pref = '1', 	b.Cantidad * 	 Costo_Std,
		                e.Costo_Pref = '2', 	b.Cantidad * 	 Costo_Promedio,
		                e.Costo_Pref = '3', 	b.Cantidad * 	 Costo_Ultimo
                    )  AS Costo_Pref, 

	                b.Cantidad * e.Costo_Promedio AS Costo_Promedio, 
	                b.Cantidad * e.Costo_Ultimo AS Costo_Ultimo, 
	
	                Switch(
		                e.Costo_Pref = '1', 	b.Precio_SubTotal - b.Cantidad *  Costo_Std,
		                e.Costo_Pref = '2', 	b.Precio_SubTotal - b.Cantidad *  Costo_Promedio,
		                e.Costo_Pref = '3', 	b.Precio_SubTotal - b.Cantidad *  Costo_Ultimo
                    ) AS Utilidad, 

	                b.Precio_Unitario, 
	                b.Porc_Descuento, 
	                b.Descuento, 
	                b.Impuesto, 
	                o.Clave AS Clave_Moneda, 
	                o.Simbolo AS Simbolo_Moneda, 
	                o.Nombre AS Moneda, 
	                a.Descripcion, 
	                a.Referencia, 
	                a.Estatus, 
	                dbo_Cat_Estatus.Nombre AS Estatus_Desc, 
	                a.Saldo, 
	                a.Id_Campana, 	
	
	                Switch(
		                dbo_Cat_Campana.Nombre IS NULL, 'Sin Campana',
		                true, dbo_Cat_Campana.Nombre
                    ) AS Nombre,
	
	                a.Encabezado, 
	                a.Pie, 
	                EmpSerie.Nombre AS Serie, 
	                b.Comentarios

                FROM  

		            ((((((((((((((((((((((@@Tabla_Cab AS a 
		            LEFT OUTER JOIN	 @@Tabla_Linea AS b ON a.@@Id = b.Id_Padre)
		            INNER JOIN	dbo_Cat_Cliente AS c ON a.Id_Cliente = c.Id_Cliente)
		            INNER JOIN	dbo_Cat_Grupo_Clientes AS d ON c.Id_GrupoClientes = d.Id_GrupoClientes)
		            LEFT OUTER JOIN	dbo_Cat_Articulo AS e ON b.Id_Articulo = e.Id_Articulo)
		            LEFT OUTER JOIN dbo_Cat_Grupo_Productos AS f ON e.Id_GrupoProductos = f.Id_GrupoProductos)
		            LEFT OUTER JOIN dbo_Cat_Color AS g ON e.Id_Color = g.Id_Color)
		            LEFT OUTER JOIN dbo_Cat_Talla AS h ON e.Id_Talla = h.Id_Talla)
		            LEFT OUTER JOIN	dbo_Cat_Subgrupo_Productos AS i ON e.Id_SubgrupoProductos = i.Id_SubgrupoProductos)
		            LEFT OUTER JOIN dbo_Cat_Linea AS j ON e.Id_Linea = j.Id_Linea)
		            INNER JOIN	dbo_Cat_TipoCambio AS k ON k.Id_Moneda = a.Id_Moneda)
		            INNER JOIN 	dbo_Cat_Colaborador AS l ON a.Id_Colaborador = l.Id_Colaborador)
		            LEFT OUTER JOIN	dbo_Cat_Almacen AS m ON a.Id_Almacen = m.Id_Almacen)
		            LEFT OUTER JOIN dbo_Cat_UM AS n ON e.Id_UM = n.Id_UM)
		            INNER JOIN	dbo_Cat_Moneda AS o ON o.Id_Moneda = a.Id_Moneda)
		            LEFT OUTER JOIN	dbo_Cat_Campana ON a.Id_Campana = dbo_Cat_Campana.Id_Campana)
                    INNER JOIN dbo_Cat_Sucursal AS Sucursal ON Sucursal.Id_Sucursal = a.Id_Sucursal)
		            LEFT OUTER JOIN dbo_Cat_Empresa_Serie AS EmpSerie ON EmpSerie.Id_Serie = Sucursal.Id_Serie)
		            INNER JOIN dbo_Cat_Estatus ON a.Estatus = dbo_Cat_Estatus.Estatus)
                    INNER JOIN dbo_Cat_SIIE_Pais AS Pais_Cliente ON Pais_Cliente.Id_SIIE_Pais = c.Id_Pais)
                    INNER JOIN dbo_Cat_SIIE_Pais AS Pais_SIIE ON Pais_SIIE.Id_SIIE_Pais = Sucursal.Id_Pais)
                    INNER JOIN dbo_Cat_SIIE_Estado AS Estado_Cliente ON Estado_Cliente.Id_SIIE_Estado = c.Id_Estado)
                    INNER JOIN dbo_Cat_SIIE_Estado AS Estado_SIIE ON Estado_SIIE.Id_SIIE_Estado = Sucursal.Id_Estado)

                WHERE 
                    (a.@@Id = @@Id_Documento) 
                           
            ";
            Query = Query.Replace("@@fecha", fechas);
            Query = Query.Replace("@@Tabla", Tabla);
            Query = Query.Replace("@@RFC", this._RFC);
            Query = Query.Replace("@@Id_Documento", Id_Documento.ToString());
            Query = Query.Replace("@@Id", Id);

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Report(Documentos_Id Tipo_Documento, int Id_Almacen, int Id_Campana, int Id_Cliente, int Id_Colaborador, int Estatus, int Tiempo)
        {
            string Tabla = "";
            string Id = "";

            if (Tipo_Documento == Documentos_Id.Doc_FacturaCliente)
            {
                Tabla = "dbo_Trans_Factura_Cliente";
                Id = "Id_Factura_Cliente";
            }
            else if (Tipo_Documento == Documentos_Id.Doc_Remision)
            {
                Tabla = "dbo_Trans_Remision";
                Id = "Id_Remision";
            }
            else if (Tipo_Documento == Documentos_Id.Doc_Pedido)
            {
                Tabla = "dbo_Trans_Pedido";
                Id = "Id_Pedido";
            }
            else if (Tipo_Documento == Documentos_Id.Doc_CotizacionVenta)
            {
                Tabla = "dbo_Trans_Cotizacion_Venta";
                Id = "Id_Cotizacion_Venta";
            }
            else if (Tipo_Documento == Documentos_Id.Doc_DevolucionCliente)
            {
                Tabla = "dbo_Trans_Devolucion_Cliente";
                Id = "Id_Devolucion_Cliente";
            }
            else if (Tipo_Documento == Documentos_Id.Doc_NotaCreditoCliente)
            {
                Tabla = "dbo_Trans_Nota_Credito_Cliente";
                Id = "Id_Nota_Credito_Cliente";
            }

            string Query = @"
                
                SELECT  

	                a.@@Id, 
	                a.Secuencia, 
	                a.RFC, 
	                a.Id_Cliente, 
	                c.RFC_Cliente, 
	                c.Razon_Social, 
	                c.Nombre_Comercial, 
	                Sucursal.Calle, 
	                Sucursal.Num_Ext, 
	                Sucursal.Num_Int, 
                    Sucursal.Colonia, 
	                Sucursal.CP, 
	                Estado_SIIE.Nombre AS Estado, 
	                Sucursal.Municipio, 
	                Pais_SIIE.Nombre AS Pais, 
                    Sucursal.Calle + ' ' + Sucursal.Num_Ext + ' ' +
                    Switch(
		                Sucursal.Num_Int   IS NULL, ', COL. ',
		                true, Sucursal.Num_Int + ', COL. '
                    )
	                + Sucursal.Colonia + ', C.P. ' + Sucursal.CP + ', ' + Sucursal.Municipio + ', ' + Estado_SIIE.Nombre AS Direccion, 

	                c.Calle AS Calle_Cliente, 
	                c.Num_Ext AS Num_Ext_Cliente,
                    c.Num_Int AS Num_Int_Cliente, 
	                c.Colonia AS Colonia_Cliente, 
	                c.CP AS CP_Cliente, 
	                Estado_Cliente.Nombre AS Estado_Cliente, 
	                c.Municipio AS Municipio_Cliente, 
	                Pais_Cliente.Nombre AS Pais_Cliente, 
	                c.Calle + ' ' + c.Num_Ext + ' ' + 
	                Switch(
		                c.Num_Int   IS NULL, ', COL. ',
		                true, c.Num_Int + ', COL. '
                    )	
	
	                + c.Colonia + ', C.P. ' + c.CP + ', ' + c.Municipio + ', ' + Estado_Cliente.Nombre AS Direccion_Cliente, 
	                d.Id_GrupoClientes, 
	                d.Nombre AS Grupo_Cliente, 
                    YEAR(a.Fecha_Documento)  AS Anio, 
	                MONTH(a.Fecha_Documento) AS Mes_Id, 
                    Cstr(YEAR(a.Fecha_Documento))  + '-' + 
      
                    Switch(
		                MONTH(a.Fecha_Documento) < 10, '0' + Cstr(MONTH(a.Fecha_Documento)),
		                true, Cstr(MONTH(a.Fecha_Documento))
                    ) AS Mes, 

	                a.Fecha_Documento as Fecha_Factura_Cliente, 
	                a.Fecha_Vencimiento, 
	                m.Id_Almacen, 
	                m.Descripcion AS Almacen, 
	                l.Id_Colaborador, 
	                l.Nombre AS Colaborador, 
	                e.Id_Articulo, 
	                e.Nombre AS Articulo, 
        	        e.NombreTicket, 
	
	                Switch(
		                e.Marca IS NULL, 'Sin Marca',
		                true, e.Marca
                    ) AS Marca, 

	                f.Id_GrupoProductos, 
	                f.Nombre AS Grupo_Productos, 
	                i.Id_SubgrupoProductos, 
	                i.Nombre AS Subgrupo_Productos, 
	                j.Id_Linea, 
	                j.Nombre AS Linea, 
	                g.Id_Color,
	                g.Nombre AS Color, 
	                h.Id_Talla, 
	                h.Nombre AS Talla, 
	                b.Precio_SubTotal * k.TipoCambio AS Importe_Pesos, 
	                b.Precio_SubTotal AS Importe_Moneda_Fact, 
	                b.Cantidad, 
	                n.Nombre AS UnidadMedida, 
	                b.Cantidad * e.Costo_Std AS Costo_Std, 
	
	                Switch(
		                e.Costo_Pref = '1', 	b.Cantidad * 	 Costo_Std,
		                e.Costo_Pref = '2', 	b.Cantidad * 	 Costo_Promedio,
		                e.Costo_Pref = '3', 	b.Cantidad * 	 Costo_Ultimo
                    )  AS Costo_Pref, 

	                b.Cantidad * e.Costo_Promedio AS Costo_Promedio, 
	                b.Cantidad * e.Costo_Ultimo AS Costo_Ultimo, 
	
	                Switch(
		                e.Costo_Pref = '1', 	b.Precio_SubTotal - b.Cantidad *  Costo_Std,
		                e.Costo_Pref = '2', 	b.Precio_SubTotal - b.Cantidad *  Costo_Promedio,
		                e.Costo_Pref = '3', 	b.Precio_SubTotal - b.Cantidad *  Costo_Ultimo
                    ) AS Utilidad, 

	                b.Precio_Unitario, 
	                b.Porc_Descuento, 
	                b.Descuento, 
	                b.Impuesto, 
	                o.Clave AS Clave_Moneda, 
	                o.Simbolo AS Simbolo_Moneda, 
	                o.Nombre AS Moneda, 
	                a.Descripcion, 
	                a.Referencia, 
	                a.Estatus, 
	                dbo_Cat_Estatus.Nombre AS Estatus_Desc, 
	                a.Saldo, 
	                a.Id_Campana, 	
	
	                Switch(
		                dbo_Cat_Campana.Nombre IS NULL, 'Sin Campana',
		                true, dbo_Cat_Campana.Nombre
                    ) AS Nombre,
	
	                a.Encabezado, 
	                a.Pie, 
	                EmpSerie.Nombre AS Serie, 
	                b.Comentarios

                FROM  

		            ((((((((((((((((((((((@@Tabla_Cab AS a 
		            LEFT OUTER JOIN	 @@Tabla_Linea AS b ON a.@@Id = b.Id_Padre)
		            INNER JOIN	dbo_Cat_Cliente AS c ON a.Id_Cliente = c.Id_Cliente)
		            INNER JOIN	dbo_Cat_Grupo_Clientes AS d ON c.Id_GrupoClientes = d.Id_GrupoClientes)
		            LEFT OUTER JOIN	dbo_Cat_Articulo AS e ON b.Id_Articulo = e.Id_Articulo)
		            LEFT OUTER JOIN dbo_Cat_Grupo_Productos AS f ON e.Id_GrupoProductos = f.Id_GrupoProductos)
		            LEFT OUTER JOIN dbo_Cat_Color AS g ON e.Id_Color = g.Id_Color)
		            LEFT OUTER JOIN dbo_Cat_Talla AS h ON e.Id_Talla = h.Id_Talla)
		            LEFT OUTER JOIN	dbo_Cat_Subgrupo_Productos AS i ON e.Id_SubgrupoProductos = i.Id_SubgrupoProductos)
		            LEFT OUTER JOIN dbo_Cat_Linea AS j ON e.Id_Linea = j.Id_Linea)
		            INNER JOIN	dbo_Cat_TipoCambio AS k ON k.Id_Moneda = a.Id_Moneda)
		            INNER JOIN 	dbo_Cat_Colaborador AS l ON a.Id_Colaborador = l.Id_Colaborador)
		            INNER JOIN	dbo_Cat_Almacen AS m ON a.Id_Almacen = m.Id_Almacen)
		            LEFT OUTER JOIN dbo_Cat_UM AS n ON e.Id_UM = n.Id_UM)
		            INNER JOIN	dbo_Cat_Moneda AS o ON o.Id_Moneda = a.Id_Moneda)
		            LEFT OUTER JOIN	dbo_Cat_Campana ON a.Id_Campana = dbo_Cat_Campana.Id_Campana)
                    INNER JOIN dbo_Cat_Sucursal AS Sucursal ON Sucursal.Id_Sucursal = a.Id_Sucursal)
		            LEFT OUTER JOIN dbo_Cat_Empresa_Serie AS EmpSerie ON EmpSerie.Id_Serie = Sucursal.Id_Serie)
		            INNER JOIN dbo_Cat_Estatus ON a.Estatus = dbo_Cat_Estatus.Estatus)
                    INNER JOIN dbo_Cat_SIIE_Pais AS Pais_Cliente ON Pais_Cliente.Id_SIIE_Pais = c.Id_Pais)
                    INNER JOIN dbo_Cat_SIIE_Pais AS Pais_SIIE ON Pais_SIIE.Id_SIIE_Pais = Sucursal.Id_Pais)
                    INNER JOIN dbo_Cat_SIIE_Estado AS Estado_Cliente ON Estado_Cliente.Id_SIIE_Estado = c.Id_Estado)
                    INNER JOIN dbo_Cat_SIIE_Estado AS Estado_SIIE ON Estado_SIIE.Id_SIIE_Estado = Sucursal.Id_Estado)

                WHERE 
                    (a.RFC = '@@RFC') 
                    
                    AND (@@Id_Almacen = -1 OR a.Id_Almacen = @@Id_Almacen) 
                    AND (@@Id_Campana = -1 OR a.Id_Campana = @@Id_Campana) 
                    AND (@@Id_Cliente = -1 OR a.Id_Cliente = @@Id_Cliente)                     
                    AND (@@Id_Colaborador = -1 OR a.Id_Colaborador = @@Id_Colaborador)                     
                    AND (@@Estatus = -1 OR a.Estatus = @@Estatus) 
                    
                    AND 
					(
					(@@Tiempo = 1 and Year(a.Fecha_Documento) = Year(NOW()) and Month(a.Fecha_Documento) = Month(NOW())) or
					(@@Tiempo = 2 and Year(a.Fecha_Documento) = Year(DateAdd('m',-1,NOW())) and Month(a.Fecha_Documento) = Month(DateAdd('m',-1,NOW()))) or
					(@@Tiempo = 3 and Year(a.Fecha_Documento) = Year(NOW())) or
					(@@Tiempo = 4 and Year(a.Fecha_Documento) = Year(DateAdd('yyyy',-1,NOW()))) or
					(@@Tiempo = 5)
					)                    
            ";

            Query = Query.Replace("@@Tabla", Tabla);
            Query = Query.Replace("@@RFC", this._RFC);
            Query = Query.Replace("@@Id_Almacen", Id_Almacen.ToString());
            Query = Query.Replace("@@Id_Campana", Id_Campana.ToString());
            Query = Query.Replace("@@Id_Cliente", Id_Cliente.ToString());
            Query = Query.Replace("@@Id_Colaborador", Id_Colaborador.ToString());
            Query = Query.Replace("@@Id", Id);
            Query = Query.Replace("@@Estatus", Estatus.ToString());
            Query = Query.Replace("@@Tiempo", Tiempo.ToString());

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Report_NC(Documentos_Id Tipo_Documento, int Id_Documento)
        {
            string Tabla = "";
            string Id = "";

            if (Tipo_Documento == Documentos_Id.Doc_NotaCreditoCliente)
            {
                Tabla = "dbo_Trans_Nota_Credito_Cliente";
                Id = "Id_Nota_Credito_Cliente";
            }

            string Query = @"
                
                SELECT  

	                a.@@Id, 
	                a.Secuencia, 
	                a.RFC, 
	                a.Id_Cliente, 
	                c.RFC_Cliente, 
	                c.Razon_Social, 
	                c.Nombre_Comercial, 
	                Sucursal.Calle, 
	                Sucursal.Num_Ext, 
	                Sucursal.Num_Int, 
                    Sucursal.Colonia, 
	                Sucursal.CP, 
	                Estado_SIIE.Nombre AS Estado, 
	                Sucursal.Municipio, 
	                Pais_SIIE.Nombre AS Pais, 
                    Sucursal.Calle + ' ' + Sucursal.Num_Ext + ' ' +
                    Switch(
		                Sucursal.Num_Int   IS NULL, ', COL. ',
		                true, Sucursal.Num_Int + ', COL. '
                    )
	                + Sucursal.Colonia + ', C.P. ' + Sucursal.CP + ', ' + Sucursal.Municipio + ', ' + Estado_SIIE.Nombre AS Direccion, 

	                c.Calle AS Calle_Cliente, 
	                c.Num_Ext AS Num_Ext_Cliente,
                    c.Num_Int AS Num_Int_Cliente, 
	                c.Colonia AS Colonia_Cliente, 
	                c.CP AS CP_Cliente, 
	                Estado_Cliente.Nombre AS Estado_Cliente, 
	                c.Municipio AS Municipio_Cliente, 
	                Pais_Cliente.Nombre AS Pais_Cliente, 
	                c.Calle + ' ' + c.Num_Ext + ' ' + 
	                Switch(
		                c.Num_Int   IS NULL, ', COL. ',
		                true, c.Num_Int + ', COL. '
                    )	
	
	                + c.Colonia + ', C.P. ' + c.CP + ', ' + c.Municipio + ', ' + Estado_Cliente.Nombre AS Direccion_Cliente, 
	                d.Id_GrupoClientes, 
	                d.Nombre AS Grupo_Cliente, 
                    YEAR(a.Fecha_Documento)  AS Anio, 
	                MONTH(a.Fecha_Documento) AS Mes_Id, 
                    Cstr(YEAR(a.Fecha_Documento))  + '-' + 
      
                    Switch(
		                MONTH(a.Fecha_Documento) < 10, '0' + Cstr(MONTH(a.Fecha_Documento)),
		                true, Cstr(MONTH(a.Fecha_Documento))
                    ) AS Mes, 

	                a.Fecha_Documento, 
	                a.Fecha_Vencimiento, 
	                a.Fecha_Entrega, 
	                -1 AS Id_Almacen, 
	                'NA' AS Almacen, 
	                l.Id_Colaborador, 
	                l.Nombre AS Colaborador, 
	                -1 AS Id_Articulo, 
	                'Monto de Nota de Crédito' AS Articulo, 
        	        	
	                'NA' AS Marca, 

	                -1 AS Id_GrupoProductos, 
	                'NA' AS Grupo_Productos, 
	                -1 AS Id_SubgrupoProductos, 
	                'NA' AS Subgrupo_Productos, 
	                -1 AS Id_Linea, 
	                'NA' AS Linea, 
	                -1 AS Id_Color,
	                'NA' AS Color, 
	                -1 AS Id_Talla, 
	                'NA' AS Talla, 
	                b.Precio_SubTotal * k.TipoCambio AS Importe_Pesos, 
	                b.Precio_SubTotal AS Importe_Moneda_Fact, 
	                b.Cantidad, 
	                'NA' AS UnidadMedida, 

	                0 AS Costo_Std, 	
	                0 AS Costo_Pref, 

	                0 AS Costo_Promedio, 
	                0 AS Costo_Ultimo, 
	
	                0 AS Utilidad, 

	                b.Precio_Unitario, 
	                b.Porc_Descuento, 
	                b.Descuento, 
	                b.Impuesto, 
	                o.Clave AS Clave_Moneda, 
	                o.Simbolo AS Simbolo_Moneda, 
	                o.Nombre AS Moneda, 
	                a.Descripcion, 
	                a.Referencia, 
	                a.Estatus, 
	                dbo_Cat_Estatus.Nombre AS Estatus_Desc, 
	                a.Saldo, 
	                a.Id_Campana, 	
	
	                Switch(
		                dbo_Cat_Campana.Nombre IS NULL, 'Sin Campana',
		                true, dbo_Cat_Campana.Nombre
                    ) AS Nombre,
	
	                a.Encabezado, 
	                a.Pie, 
	                EmpSerie.Nombre AS Serie, 
	                b.Comentarios

                FROM  

		            ((((((((((((((@@Tabla_Cab AS a 
		            LEFT OUTER JOIN	 @@Tabla_Linea AS b ON a.@@Id = b.Id_Padre)
		            INNER JOIN	dbo_Cat_Cliente AS c ON a.Id_Cliente = c.Id_Cliente)
		            INNER JOIN	dbo_Cat_Grupo_Clientes AS d ON c.Id_GrupoClientes = d.Id_GrupoClientes)
		            
		            
		            INNER JOIN	dbo_Cat_TipoCambio AS k ON k.Id_Moneda = a.Id_Moneda)
		            INNER JOIN 	dbo_Cat_Colaborador AS l ON a.Id_Colaborador = l.Id_Colaborador)
		            
		            INNER JOIN	dbo_Cat_Moneda AS o ON o.Id_Moneda = a.Id_Moneda)
		            LEFT OUTER JOIN	dbo_Cat_Campana ON a.Id_Campana = dbo_Cat_Campana.Id_Campana)
                    INNER JOIN dbo_Cat_Sucursal AS Sucursal ON Sucursal.Id_Sucursal = a.Id_Sucursal)
		            LEFT OUTER JOIN dbo_Cat_Empresa_Serie AS EmpSerie ON EmpSerie.Id_Serie = Sucursal.Id_Serie)
		            INNER JOIN dbo_Cat_Estatus ON a.Estatus = dbo_Cat_Estatus.Estatus)
                    INNER JOIN dbo_Cat_SIIE_Pais AS Pais_Cliente ON Pais_Cliente.Id_SIIE_Pais = c.Id_Pais)
                    INNER JOIN dbo_Cat_SIIE_Pais AS Pais_SIIE ON Pais_SIIE.Id_SIIE_Pais = Sucursal.Id_Pais)
                    INNER JOIN dbo_Cat_SIIE_Estado AS Estado_Cliente ON Estado_Cliente.Id_SIIE_Estado = c.Id_Estado)
                    INNER JOIN dbo_Cat_SIIE_Estado AS Estado_SIIE ON Estado_SIIE.Id_SIIE_Estado = Sucursal.Id_Estado)

                WHERE 
                    (a.@@Id = @@Id_Documento) 
                           
            ";

            Query = Query.Replace("@@Tabla", Tabla);
            Query = Query.Replace("@@RFC", this._RFC);
            Query = Query.Replace("@@Id_Documento", Id_Documento.ToString());
            Query = Query.Replace("@@Id", Id);

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Report_NC(Documentos_Id Tipo_Documento, int Id_Almacen, int Id_Campana, int Id_Cliente, int Id_Colaborador, int Estatus, int Tiempo)
        {
            string Tabla = "";
            string Id = "";

            if (Tipo_Documento == Documentos_Id.Doc_NotaCreditoCliente)
            {
                Tabla = "dbo_Trans_Nota_Credito_Cliente";
                Id = "Id_Nota_Credito_Cliente";
            }

            string Query = @"
                
                SELECT  

	                a.@@Id, 
	                a.Secuencia, 
	                a.RFC, 
	                a.Id_Cliente, 
	                c.RFC_Cliente, 
	                c.Razon_Social, 
	                c.Nombre_Comercial, 
	                Sucursal.Calle, 
	                Sucursal.Num_Ext, 
	                Sucursal.Num_Int, 
                    Sucursal.Colonia, 
	                Sucursal.CP, 
	                Estado_SIIE.Nombre AS Estado, 
	                Sucursal.Municipio, 
	                Pais_SIIE.Nombre AS Pais, 
                    Sucursal.Calle + ' ' + Sucursal.Num_Ext + ' ' +
                    Switch(
		                Sucursal.Num_Int   IS NULL, ', COL. ',
		                true, Sucursal.Num_Int + ', COL. '
                    )
	                + Sucursal.Colonia + ', C.P. ' + Sucursal.CP + ', ' + Sucursal.Municipio + ', ' + Estado_SIIE.Nombre AS Direccion, 

	                c.Calle AS Calle_Cliente, 
	                c.Num_Ext AS Num_Ext_Cliente,
                    c.Num_Int AS Num_Int_Cliente, 
	                c.Colonia AS Colonia_Cliente, 
	                c.CP AS CP_Cliente, 
	                Estado_Cliente.Nombre AS Estado_Cliente, 
	                c.Municipio AS Municipio_Cliente, 
	                Pais_Cliente.Nombre AS Pais_Cliente, 
	                c.Calle + ' ' + c.Num_Ext + ' ' + 
	                Switch(
		                c.Num_Int   IS NULL, ', COL. ',
		                true, c.Num_Int + ', COL. '
                    )	
	
	                + c.Colonia + ', C.P. ' + c.CP + ', ' + c.Municipio + ', ' + Estado_Cliente.Nombre AS Direccion_Cliente, 
	                d.Id_GrupoClientes, 
	                d.Nombre AS Grupo_Cliente, 
                    YEAR(a.Fecha_Documento)  AS Anio, 
	                MONTH(a.Fecha_Documento) AS Mes_Id, 
                    Cstr(YEAR(a.Fecha_Documento))  + '-' + 
      
                    Switch(
		                MONTH(a.Fecha_Documento) < 10, '0' + Cstr(MONTH(a.Fecha_Documento)),
		                true, Cstr(MONTH(a.Fecha_Documento))
                    ) AS Mes, 

	                a.Fecha_Documento, 
	                a.Fecha_Vencimiento, 
	                -1 AS Id_Almacen, 
	                'NA' AS Almacen, 
	                l.Id_Colaborador, 
	                l.Nombre AS Colaborador, 
	                -1 AS Id_Articulo, 
	                'Monto de Nota de Crédito' AS Articulo, 
        	        	
	                'NA' AS Marca, 

	                -1 AS Id_GrupoProductos, 
	                'NA' AS Grupo_Productos, 
	                -1 AS Id_SubgrupoProductos, 
	                'NA' AS Subgrupo_Productos, 
	                -1 AS Id_Linea, 
	                'NA' AS Linea, 
	                -1 AS Id_Color,
	                'NA' AS Color, 
	                -1 AS Id_Talla, 
	                'NA' AS Talla, 
	                b.Precio_SubTotal * k.TipoCambio AS Importe_Pesos, 
	                b.Precio_SubTotal AS Importe_Moneda_Fact, 
	                b.Cantidad, 
	                'NA' AS UnidadMedida, 

	                0 AS Costo_Std, 	
	                0 AS Costo_Pref, 

	                0 AS Costo_Promedio, 
	                0 AS Costo_Ultimo, 
	
	                0 AS Utilidad, 

	                b.Precio_Unitario, 
	                b.Porc_Descuento, 
	                b.Descuento, 
	                b.Impuesto, 
	                o.Clave AS Clave_Moneda, 
	                o.Simbolo AS Simbolo_Moneda, 
	                o.Nombre AS Moneda, 
	                a.Descripcion, 
	                a.Referencia, 
	                a.Estatus, 
	                dbo_Cat_Estatus.Nombre AS Estatus_Desc, 
	                a.Saldo, 
	                a.Id_Campana, 	
	
	                Switch(
		                dbo_Cat_Campana.Nombre IS NULL, 'Sin Campana',
		                true, dbo_Cat_Campana.Nombre
                    ) AS Nombre,
	
	                a.Encabezado, 
	                a.Pie, 
	                EmpSerie.Nombre AS Serie, 
	                b.Comentarios

                FROM  

		            ((((((((((((((@@Tabla_Cab AS a 
		            LEFT OUTER JOIN	 @@Tabla_Linea AS b ON a.@@Id = b.Id_Padre)
		            INNER JOIN	dbo_Cat_Cliente AS c ON a.Id_Cliente = c.Id_Cliente)
		            INNER JOIN	dbo_Cat_Grupo_Clientes AS d ON c.Id_GrupoClientes = d.Id_GrupoClientes)
		            
		            
		            INNER JOIN	dbo_Cat_TipoCambio AS k ON k.Id_Moneda = a.Id_Moneda)
		            INNER JOIN 	dbo_Cat_Colaborador AS l ON a.Id_Colaborador = l.Id_Colaborador)
		            
		            INNER JOIN	dbo_Cat_Moneda AS o ON o.Id_Moneda = a.Id_Moneda)
		            LEFT OUTER JOIN	dbo_Cat_Campana ON a.Id_Campana = dbo_Cat_Campana.Id_Campana)
                    INNER JOIN dbo_Cat_Sucursal AS Sucursal ON Sucursal.Id_Sucursal = a.Id_Sucursal)
		            LEFT OUTER JOIN dbo_Cat_Empresa_Serie AS EmpSerie ON EmpSerie.Id_Serie = Sucursal.Id_Serie)
		            INNER JOIN dbo_Cat_Estatus ON a.Estatus = dbo_Cat_Estatus.Estatus)
                    INNER JOIN dbo_Cat_SIIE_Pais AS Pais_Cliente ON Pais_Cliente.Id_SIIE_Pais = c.Id_Pais)
                    INNER JOIN dbo_Cat_SIIE_Pais AS Pais_SIIE ON Pais_SIIE.Id_SIIE_Pais = Sucursal.Id_Pais)
                    INNER JOIN dbo_Cat_SIIE_Estado AS Estado_Cliente ON Estado_Cliente.Id_SIIE_Estado = c.Id_Estado)
                    INNER JOIN dbo_Cat_SIIE_Estado AS Estado_SIIE ON Estado_SIIE.Id_SIIE_Estado = Sucursal.Id_Estado)

                WHERE 
                    (a.RFC = '@@RFC') 
                                        
                    AND (@@Id_Campana = -1 OR a.Id_Campana = @@Id_Campana) 
                    AND (@@Id_Cliente = -1 OR a.Id_Cliente = @@Id_Cliente)                     
                    AND (@@Id_Colaborador = -1 OR a.Id_Colaborador = @@Id_Colaborador)                     
                    AND (@@Estatus = -1 OR a.Estatus = @@Estatus) 
                    
                    AND 
					(
					(@@Tiempo = 1 and Year(a.Fecha_Documento) = Year(NOW()) and Month(a.Fecha_Documento) = Month(NOW())) or
					(@@Tiempo = 2 and Year(a.Fecha_Documento) = Year(DateAdd('m',-1,NOW())) and Month(a.Fecha_Documento) = Month(DateAdd('m',-1,NOW()))) or
					(@@Tiempo = 3 and Year(a.Fecha_Documento) = Year(NOW())) or
					(@@Tiempo = 4 and Year(a.Fecha_Documento) = Year(DateAdd('yyyy',-1,NOW()))) or
					(@@Tiempo = 5)
					)                    
            ";

            Query = Query.Replace("@@Tabla", Tabla);
            Query = Query.Replace("@@RFC", this._RFC);
            Query = Query.Replace("@@Id_Almacen", Id_Almacen.ToString());
            Query = Query.Replace("@@Id_Campana", Id_Campana.ToString());
            Query = Query.Replace("@@Id_Cliente", Id_Cliente.ToString());
            Query = Query.Replace("@@Id_Colaborador", Id_Colaborador.ToString());
            Query = Query.Replace("@@Id", Id);
            Query = Query.Replace("@@Estatus", Estatus.ToString());
            Query = Query.Replace("@@Tiempo", Tiempo.ToString());

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public bool NotaCredito_HasLinea(int Id_Nota_Credito)
        {
            string Query = @"SELECT * FROM dbo_Trans_Nota_Credito_Cliente_Linea WHERE Id_Padre = @@Id_Nota_Credito";
            Query = Query.Replace("@@Id_Nota_Credito", Id_Nota_Credito.ToString());

            DataTable dt = SrvDB.ExecuteQuery_Get(Query);

            if (dt.Rows.Count > 0)
                return true;
            return false;
        }

        public DataTable Get_Nota_Credito_Clientes(int id)
        {
            string Query = @"SELECT  
                            switch  (
                                        id_documento  = 0,'Todos ' +  cstr(tipo_documento) ,
                                        id_documento  = 1,'Factura ' +  cstr(tipo_documento) ,
                                        id_documento  = 2,' R. de honorarios ' +  cstr(tipo_documento) ,
                                        id_documento  = 3,'R. de Arrendamiento ' +  cstr(tipo_documento) ,
                                     ) AS   Tipo_Documento,importe,fecha_Alta
                           from dbo_Trans_Aplicacion_Nota_Credito_Clientes  where  id_nota_credito = @@id ";
            Query = Query.Replace("@@id", id.ToString());
            // DataTable dt = SrvDB.ExecuteQuery_Get(Query);
            return SrvDB.ExecuteQuery_Get(Query);
        }
        #endregion

    }
}



